美元符号" \ $"在正则表达式中使用单词边界" \ b" (PHP / JavaScript)

时间:2015-09-30 17:00:46

标签: javascript php regex dollar-sign word-boundary

我知道涉及美元符号的问题" $"在regex中(这里:在PHP和JavaScript中)之前已经讨论了很多次:是的,我知道我需要添加一个反斜杠" \"在它前面(取决于字符串处理甚至两个),但匹配美元符号的正确方法是" \ $"。 ...去过那里,做到了,工作正常。

但这是我的新问题:美元符号" \ $"在标有" \ b"的单词边界旁边。 ...以下示例可以轻松地在例如regexpal.com。

让我们从以下文字开始搜索:

  

50美元

     

50美元

     

$ 50

     

50美元

我的正则表达式应该找到" USD"," Dollar"或" $"。很容易:试试吧

  

(USD |美元| \ $)

成功:它找到" $"," USD",以及" Dollar"发生,包括"美元"。

但是,让我们试着跳过"美元"通过在多项选择之后添加单词边界:

  

(USD |美元| \ $)\ B'/ P>

这就是麻烦:" USD"匹配,"美元"匹配,"美元"被拒绝了...但单身,正确地被反击(或逃脱)" $"也被拒绝,虽然之前只有一秒钟。

它与括号内的多项选择无关:请尝试

  

\ $

VS

  

\ $ \ B'/ P>

并且它是一样的:第一个匹配美元符号,第二个匹配美元符号。

另一个发现:

  

(美元|美元| \ $)\ b

空白" " ")"和" \ b"实际上有效。但是这种解决方法在所有情况下可能都不可行(如果应该有非空白字边界)。

当涉及字边界时,似乎拒绝找到逃逸的美元符号。

我很想听听你提出的解决这个谜团的建议。 - 提前多多谢谢!

1 个答案:

答案 0 :(得分:2)

它不匹配,因为在$中,$之后不存在字边界。但是,如果一个单词在$之后立即开始 - 例如

  

$百万

将匹配。

您可能想要做的是使\b仅适用于您确实想要匹配单词边界的情况 - 例如

(USD\b|Dollar\b|\$)

这将坚持在" USD"之后出现字边界。在" Dollar"之后,但不是在" $"。

之后