我知道涉及正则表达式中的美元符号"$"的问题(在这里:无论是在PHP和JavaScript中),已经被讨论了很多次:是的,我知道我需要在它前面添加反斜杠“\”(根据字符串处理甚至需要两个),但正确匹配美元符号的方法是"\$"。......已经做过了,运行良好。
但是这是我的新问题:美元符号"$"紧跟着用"\b"标记的单词边界。......我的以下示例可以在例如regexpal.com上轻松重现。
让我们从要搜索的以下文本开始:
Dollar 50 Dollars 50 $ 50 USD 50
我的正则表达式应该找到"USD"、"Dollar"或"$"。很容易:让我们尝试
(USD|Dollar|\$)
成功:它找到了"$","USD"以及"Dollar"出现的两个位置,包括在"Dollars"中。
但是让我们尝试在多个选择后添加单词边界来跳过"Dollars":
(USD|Dollar|\$)\b
这是麻烦的:匹配"USD",匹配"Dollar",拒绝"Dollars"......但是单个、正确加上反斜杠(或转义)的"$"也被拒绝了,尽管刚才还有效。
这与括号内的多个选择无关:只需尝试
\$
与。
\$\b
它是一样的:第一个匹配美元符号,第二个不匹配。
另一个发现:
(USD|Dollar|\$) \b
在")"和"\b"之间有一个空格实际上可以工作。但是,在某些情况下,这种解决方法可能不可行(如果应该有一个非空白单词边界)。
看来当涉及到单词边界时,转义的美元符号拒绝被找到。
我很想听听您解决这个谜团的建议。--非常感谢!
但是这是我的新问题:美元符号"$"紧跟着用"\b"标记的单词边界。......我的以下示例可以在例如regexpal.com上轻松重现。
让我们从要搜索的以下文本开始:
Dollar 50 Dollars 50 $ 50 USD 50
我的正则表达式应该找到"USD"、"Dollar"或"$"。很容易:让我们尝试
(USD|Dollar|\$)
成功:它找到了"$","USD"以及"Dollar"出现的两个位置,包括在"Dollars"中。
但是让我们尝试在多个选择后添加单词边界来跳过"Dollars":
(USD|Dollar|\$)\b
这是麻烦的:匹配"USD",匹配"Dollar",拒绝"Dollars"......但是单个、正确加上反斜杠(或转义)的"$"也被拒绝了,尽管刚才还有效。
这与括号内的多个选择无关:只需尝试
\$
与。
\$\b
它是一样的:第一个匹配美元符号,第二个不匹配。
另一个发现:
(USD|Dollar|\$) \b
在")"和"\b"之间有一个空格实际上可以工作。但是,在某些情况下,这种解决方法可能不可行(如果应该有一个非空白单词边界)。
看来当涉及到单词边界时,转义的美元符号拒绝被找到。
我很想听听您解决这个谜团的建议。--非常感谢!
$
和空格不是单词字符。 - Felix Kling