我需要我们的帮助来替换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);