2016-01-12 88 views
2

我有做除了一個match.The PHP代碼的所有匹配的單詞匹配一個正則表達式是:正則表達式匹配單詞開頭連字符

$string = preg_replace("/\b".$wordToMatch."\b/","<span class='sp_err' style='background-color:yellow;'>".$wordToMatch."</span>",$string); 

在這裏,在上述正則表達式時,$ wordToMatch變量值變爲「-abc」和$ string的值是「單詞-abc應該匹配,abc-abc不應該匹配」。使用上面的正則表達式它不能捕獲「-abc」。

  • 我想增強在上述正則表達式,以便它可以在$字符串趕上「-ABC」,但如果它試圖在$字符串「ABC-ABC」匹配「-ABC」它不應該。
+0

什麼'/ \ B-ABC \ B /'? –

+0

謝謝......它匹配「-abc」,但它不匹配沒有在之前的正則表達式[「/ \ b」。$ wordToMatch。「\ b /」]中加入的連字符「abc」的單詞。 –

回答

1

如果您的關鍵字可以有非單詞字符在攻防兩端你可以依靠lookarounds一個全字匹配:

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

這裏,(?<!\w)將確保沒有字字符前的字匹配,並且(?!\w)負向前視將確保沒有字符這個詞匹配。這些是毫不含糊的子模式,而\b的含義取決於上下文。

參見regex demo表示-abc未在abc-abc匹配和匹配,如果它不與字字符括起來。

PHP demo

$wordToMatch = "-abc"; 
$re = "/(?<!\\w)" . $wordToMatch . "(?!\\w)/"; 
$str = "abc-abc -abc"; 
$subst = "!$0!"; 
$result = preg_replace($re, $subst, $str); 
echo $result; // => abc-abc !-abc! 
+0

謝謝..但這裏它也匹配「abc-abc」中的「-abc」。不應該發生。 –

+0

這裏,['-abc'在'abc-abc'中不匹配](https://regex101.com/r/yN6fA0/1) –

+0

如果單詞$ wordToMatch以連字符開頭ie:「 - answer」if $ string包含任何獨立詞,如「-answer」[不是「問題答案」],它應該顯示獨立詞的匹配。 –

相關問題