我有一个regex,它处理除一个匹配之外的所有匹配。单词匹配的PHP代码是:
$string = preg_replace("/'b".$wordToMatch."'b/","<span class='sp_err' style='background-color:yellow;'>".$wordToMatch."</span>",$string);
在上面的正则表达式中,当$wordToMatch变量值变为"-abc",$string值为"单词-abc应该匹配,abc-abc不应该匹配"时。使用上面的正则函数,它无法捕捉到"-aabc"。
- 我希望在上面的regex中进行增强,这样它就可以在$string中捕获"-abc",但如果它试图匹配$string的"abc-abc"中的"-aabc",它就不应该匹配
如果你的关键词两端都有非单词字符,你可以依靠查找来进行全单词匹配:
"/(?<!''w)".$wordToMatch."(?!''w)/"
这里,(?<!'w)
将确保在要匹配的单词之前没有单词字符,而(?!'w)
负先行将确保在要匹配的词之后没有单词字符。这些是明确的子模式,而'b
的含义取决于上下文。
请参阅regex演示,显示-abc
在abc-abc
中不匹配,如果它没有用单词字符括起来,则匹配。
PHP演示:
$wordToMatch = "-abc";
$re = "/(?<!''w)" . $wordToMatch . "(?!''w)/";
$str = "abc-abc -abc";
$subst = "!$0!";
$result = preg_replace($re, $subst, $str);
echo $result; // => abc-abc !-abc!