正则表达式删除除引号之外的常用整个单词

时间:2013-11-11 09:06:04

标签: php regex string

我在下面有这个正则表达式,从字符串($commonWords)中删除常见的整个单词($input),我想调整它以便

  1. 它会忽略双引号或单引号中的单词(例如谷歌搜索标签中的精确搜索)
  2. 删除以连字符('-')开头的字词,但不删除双引号或单引号内的字词(例如谷歌搜索标签中的否定搜索)

    return preg_replace('/\b('.implode('|',$commonWords).')\b/i','',$input);

  3. 感谢

1 个答案:

答案 0 :(得分:1)

如果你的“整个单词”被“免除”的引号所包围(而不是整个句子在引号中),那么使用环视很容易做到断言:

/\b(?<!['"])('.implode('|',$commonWords).')\b(?!['"])/i
   ^^^^^^^^^                                 ^^^^^^^^

您可以采取额外步骤,通过反向引用匹配两个引号:

/\b(?<!(['"]))('.implode('|',$commonWords).')\b(?!\1)/i
   ^^^^^^^^^^^                                 ^^^^^^