2008-11-02 158 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); 
相关问题