如何从PHP中的字符串中获取特定单词?

时间:2008-11-02 16:56:51

标签: php regex string

假设你有一个字符串,但你不知道它包含什么。并且您希望使用同一单词的格式化版本替换特定单词或单词部分的所有出现。 例如,我有一个包含“lorem ipsum”的字符串,我想用“lorem can”替换包含“lo”的整个单词,以便最终结果为“lorem can ipsum” 但如果我把字符串“loreal ipsum”通过相同的函数,结果现在将是“loreal can ipsum”。 感谢

2 个答案:

答案 0 :(得分:4)

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

RoBorg的答案是:

  1. \w匹配数字和下划线,它们不是人类语言中的真正的单词字符,因此它匹配'lo_fi'或'__lo __'。
  2. 它还会匹配不以lo开头的单词,例如'slorem',或甚至以lo结尾的单词,例如'allo'。
  3. \b确保lo遵循分词(零宽度),[a-z]+确保至少有一个字母字符跟随'lo'。

    编辑:我看到问题的文字说“包含”而不是“以...开头”,在这种情况下,第一个\b可能会被省略。

    编辑2:请注意,这些解决方案都不是国际安全的。我没有测试过这个,但PHP的RegEx非常强大,所以我猜它会起作用:

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

答案 1 :(得分:0)

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

将“lo”加上任何单词字符替换为“lo”+其他字符+“can”

它还会将“lo”替换为“lo can” - 如果您不想这样做,请将\w*更改为\w+