Regex替换某些字符之间的单词


Regex replace word between some character

我需要我们的帮助来替换regex。我需要在php中用preg_replace替换一个单词或一个句子

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

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

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

尝试:

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

正则表达式锚定在整个输入字符串的开始和结束处(正则表达式开始/结束处的^$)。您需要删除这些正则表达式才能工作。

然后,对于单个字符的替换,最好使用字符类而不是替换:

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

如果需要保留替换操作的分隔字符,请将它们包含在捕获组中:

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

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

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