9

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


但这是我的新问题:用“\b”标记的单词边界旁边的美元符号“\$”。... 我的以下示例可以很容易地在 regexpal.com 上复制。

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

50 美元

50 美元

50 美元

50 美元

我的正则表达式应该找到“USD”、“Dollar”或“$”。很简单:让我们试试

(美元|美元|\$)

成功:它找到“$”、“USD”和两个“Dollar”出现,包括“Dollars”。

但是让我们尝试通过在多项选择之后添加单词边界来跳过“美元”:

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

这很麻烦:“USD”被匹配,“Dollar”被匹配,“Dollars”被拒绝......但是单个,正确反斜杠(或转义)的“$”也被拒绝,尽管这在前一秒钟有效.

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

\$

对比

\$\b

也是一样的:第一个匹配美元符号,第二个不匹配。


另一个发现:

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

在“)”和“\b”之间有一个空白“”实际上可以工作。但是这种解决方法可能并非在所有情况下都可行(如果应该有非空白单词边界)。


当涉及单词边界时,似乎拒绝找到转义的美元符号。

我很想听听你解开这个谜团的建议。- 提前非常感谢!

4

1 回答 1

4

它不匹配,因为$$. 但是,如果一个单词紧跟在$- 例如

百万美元

会匹配。

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

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

这将坚持在“USD”和“Dollar”之后有一个单词边界,但在“$”之后没有。

于 2015-09-30T17:07:47.580 回答