Php Regex-美元符号仅在后面跟着另一个字符时匹配

Php Regex-美元符号仅在后面跟着另一个字符时匹配,php,regex,dollar-sign,Php,Regex,Dollar Sign,我知道有很多关于正则表达式和美元符号的线索。但我读的那本根本没用。我有这个正则表达式\bfoo bar\$s?\b,它应该匹配foo bar$和foo bar$s。问题是,正则表达式只匹配foobar$s 对于\bfoo bars?\b它适用于foo bar和foo bars 美元是名字的一部分,所以我不能删除它 有什么想法吗 \b(foo bar\$)(s\b)? \b匹配单词边界,单词边界定义为单词字符后跟非单词字符,反之亦然。$是非单词字符,因此$\b是失败的匹配,因为\b两边都被非单词

我知道有很多关于正则表达式和美元符号的线索。但我读的那本根本没用。我有这个正则表达式\bfoo bar\$s?\b,它应该匹配foo bar$和foo bar$s。问题是,正则表达式只匹配foobar$s

对于\bfoo bars?\b它适用于foo bar和foo bars

美元是名字的一部分,所以我不能删除它

有什么想法吗

\b(foo bar\$)(s\b)?
\b匹配单词边界,单词边界定义为单词字符后跟非单词字符,反之亦然。$是非单词字符,因此$\b是失败的匹配,因为\b两边都被非单词字符包围

解决方案是只查找第二个\b,如果它在s之后

\b匹配单词边界,单词边界定义为单词字符后跟非单词字符,反之亦然。$是非单词字符,因此$\b是失败的匹配,因为\b两边都被非单词字符包围


解决方案是只查找第二个\b,如果它在一个s之后。

请向我们展示演示该问题的代码。通常是正则表达式-即使问题已经得到回答,我也会被询问,您还需要什么。我希望看到示例输入、所需输出、实际输出以及生成它的代码。从您的帖子中可以看出,问题是与您未向我们显示的输入有关,还是与您未向我们显示的代码有关您的正则表达式将与字符串“oh foo bar$baz”匹配,因此,作为子字符串,您告诉我们的其中一个字符串不匹配。约翰·库格曼(John Kugelman)对这个问题做了一个善意的猜测,结果证明猜测是正确的。哦,好吧,我认为代码并不重要,因为它只是正则表达式,对于javascript、php或任何东西都是一样的。但你说的“oh foo bar$baz”是对的——当然,只有在美元后面有空格时,才应该有匹配。感谢hintPlease show us代码演示了这个问题。它通常是正则表达式-即使问题已经得到了回答,我也会被问到,您还需要什么。我想看看示例输入、期望输出、实际输出以及生成它的代码。从您的帖子中可以看出,问题是与您未向我们显示的输入有关,还是与您未向我们显示的代码有关您的正则表达式将与字符串“oh foo bar$baz”匹配,因此,作为子字符串,您告诉我们的其中一个字符串不匹配。约翰·库格曼(John Kugelman)对这个问题做了一个善意的猜测,结果证明猜测是正确的。哦,好吧,我认为代码并不重要,因为它只是正则表达式,对于javascript、php或任何东西都是一样的。但你说的“oh foo bar$baz”是对的——当然,只有在美元后面有空格时,才应该有匹配。谢谢你的提示你是对的-它很有效。我想如果我转义$php,就会将其作为单词字符处理。谢谢你的解释,如果我没记错的话,顺便说一句,拉丁语8859-1中的单词字符基本上是[A-Za-z0-9_uu]加上乌姆劳特、阿库特、格雷夫斯等等,所以像$or这样的字符不算。你是对的,它是有效的。我想如果我转义$php,就会将其作为单词字符处理。另外,如果我没记错的话,谢谢你的好解释。拉丁语8859-1中的单词字符基本上是[A-Za-z0-9_uu]加上乌姆劳特、阿库特、格雷夫斯等等,所以像$or这样的字符不算在内。