2008-11-02 159 views
1

假設你有一個字符串,但你不知道它包含了什麼。並且你想用同一個單詞的格式化版本來替換特定單詞或單詞部分的所有出現。 例如,我有一個包含「lorem ipsum」的字符串,我想用「lorem can」替換包含「lo」的整個單詞,以便最終結果爲「lorem can ipsum」,但如果我將字符串「loreal ipsum」通過相同的功能,結果現在將是「loreal可以ipsum」。 感謝如何從PHP中的字符串中獲取特定單詞?

回答

0

$str = preg_replace('/lo(\w*)/', 'lo$1 can', $str);

這將替換 「LO」 加上 「LO」 +其他字符+任意單詞字符 「可以」

還將取代 「LO」 和 「LO可以」 - 如果你不想這樣,與RoBorg的回答改變\w*\w+

4
$str = preg_replace('/(\blo[a-z]+\b)/', '$1 can', $str); 

的問題是:

  1. \w匹配數字和下劃線,它們不是真的人類語言中的單詞字符,所以它會匹配'lo_fi'或'__lo__'。
  2. 它還會匹配不以lo開頭的單詞,例如'slorem',或者甚至包含以'allo'結尾的單詞。

\b確保lo如下的單詞斷(零寬度)和[a-z]+確保至少一個字母字符如下「LO」。

編輯:我看到問題的文字說「包含」而不是「開始於」,在這種情況下,第一個\b可能會被省略。

編輯2:請注意,這些解決方案都不是國際安全的。我沒有測試過這個,但是PHP的RegEx功能很強大,所以我猜測它可以工作:

$str = preg_replace('/(\blo[a-z\p{L}]+\b)/', '$1 can', $str); 
相關問題