2016-11-13 64 views
0

這裏是我的代碼:當我們有一個子字符串時如何匹配整個單詞?

$txt = 'this is a text'; 
$word = 'is'; 
echo str_replace($word, '<b>'.$word.'</b>', $txt); 
//=> th<b>is</b> <b>is</b> a text 

正如你看到的,我的子字符串是上面的例子中is,它只是isthis部分匹配。雖然我需要選擇整個單詞。因此,這是預期的結果:

//=> <b>this</b> <b>is</b> a text 

所以我需要檢查子串的左側和右側,符合一切,直到第一個字符串^或字符串$或白色S頁面\s月底。

我該怎麼做?

+0

那麼你可以用String#的indexOf,然後知道使用適當子建的包裝。 – Rogue

回答

0

使用正則表達式與word boundary anchors

$regex = '/\b(\p{L}*' . preg_quote($word, '/') . '\p{L}*)\b/u'; 
echo preg_replace($regex, '<b>$1</b>', $txt); 

其中\p{L}代表一個Unicode信(見Unicode character classes)。例如,如果Unicode不受支持,請將\p{L}替換爲\S(非空格字符)。

輸出

<b>this</b> <b>is</b> a text 
0

如果你想匹配一個單詞的字符串,以及這個詞本身就可以檢查單詞周圍的任何單詞字符,你尋找像這樣:

$re = '/(\w*is\w*)/'; 
$str = 'this is a text'; 
$subst = '<b>$1<b>'; 

$result = preg_replace($re, $subst, $str); 

echo "The result of the substitution is ".$result; 

這會給你:

<b>this<b> <b>is<b> a text 
相關問題