正则表达式替换某些字符之间的单词

时间:2014-09-16 10:13:45

标签: php regex preg-replace

我的正则表达式替换需要我们的帮助。 我需要用php中的preg_replace替换一个单词或一个句子

  • 从头开始。或者,或者空白或者什么都没有
  • 并结束。或者,或者!要么 ?或:或;或空白

但是我的正则表达式不起作用:(

"/^(?:\s|\.|,)($sWord)(?:\s|\.|,|\!|\?|\:|;)$/"

尝试:

$sContent = preg_replace("/^(?:\s|\.|,)($sWord)(?:\s|\.|,|\!|\?|\:|;)$/",
                         '<a href="#" data-toggle="tooltip" title="' . htmlspecialchars($sDefinition) . '">' . $sWord . '</a>', 
                         $sContent);

1 个答案:

答案 0 :(得分:0)

您的正则表达式是anchored整个输入字符串的开头和结尾(^$在正则表达式的开头/结尾处)。您需要删除正则表达式才能正常工作。

然后,对于单字符替代方案,最好使用character class而不是替换:

"/[\s.,]($sWord)[\s.,!?:;]/"

如果您需要保留替换操作的分隔符,请将它们括在capturing group中:

"/([\s.,])($sWord)([\s.,!?:;])/"

然后您可以在替换字符串中使用$1等:

$sContent = preg_replace("/([\s.,])($sWord)([\s.,!?:;])/",
                         '$1<a href="#" data-toggle="tooltip" title="' . htmlspecialchars($sDefinition) . '">$2</a>$3', 
                         $sContent);