Php 正则表达式匹配以连字符开头的单词

Php 正则表达式匹配以连字符开头的单词,php,regex,Php,Regex,我有一个正则表达式,除了一个匹配之外,它进行所有匹配。单词match的PHP代码是: $string = preg_replace("/\b".$wordToMatch."\b/","<span class='sp_err' style='background-color:yellow;'>".$wordToMatch."</span>",$string); $string=preg\u replace(“/\b”。$wordToMatch.\b/”,“.$wordT

我有一个正则表达式,除了一个匹配之外,它进行所有匹配。单词match的PHP代码是:

$string = preg_replace("/\b".$wordToMatch."\b/","<span class='sp_err' style='background-color:yellow;'>".$wordToMatch."</span>",$string); 
$string=preg\u replace(“/\b”。$wordToMatch.\b/”,“.$wordToMatch.”,$string);
在上面的正则表达式中,$wordToMatch变量值变为“-abc”,而$string值变为“单词-abc应该匹配,abc abc不应该匹配”。在上面的正则表达式中,它无法捕捉“-abc”

  • 我希望在上面的正则表达式中进行增强,以便它可以捕获$string中的“-abc”,但如果它试图匹配$string的“abc abc”中的“-abc”,则不应该
如果关键字的两端都有非单词字符,则可以使用查找框进行全单词匹配:

"/(?<!\\w)".$wordToMatch."(?!\\w)/"

谢谢..但这里它也匹配“abc abc”中的“-abc”。这不应该发生。如果单词$wordToMatch以连字符开头,即:“-answer”,并且如果$string包含任何独立单词,如“-answer”[而不是“问答”],它应该显示独立单词的匹配。这个正则表达式会满足我在前面匹配的所有情况吗“/\b”。$wordToMatch.\b/”regex?是的,因为
\b
匹配一个单词边界,即非单词字符和单词字符之间的一个位置(也在开头和结尾)。但是,这些查找框具有“静态”“意义和将在任何上下文中执行相同的操作。非常感谢……我已经检查了大多数场景,并且它对所有场景都有效……谢谢……关于
/\B-abc\B/
?谢谢……它与“-abc”匹配,但与没有连字符“abc”的单词不匹配,这是在以前的正则表达式[“/\B”$wordToMatch.\B/”]中加工的。
$wordToMatch = "-abc";
$re = "/(?<!\\w)" . $wordToMatch . "(?!\\w)/"; 
$str = "abc-abc -abc"; 
$subst = "!$0!"; 
$result = preg_replace($re, $subst, $str);
echo $result; // => abc-abc !-abc!