我正在尝试使用preg_replace来匹配PHP中的整个单词。除非一个单词以重音字母开头或结尾,否则它完美无缺。
此代码:
$html = preg_replace('/\b'.$match.'\b/', 'replace', $html);
在以下情况下效果很好:
$html = "El camión salió del aparcamiento"
$match = "camión"
所以“camión”匹配模式。
然而,对于相同的$ html,如果
$match = "salió"
这与此处可以观察到的行为相同:
我尝试过使用mb_ereg_replace,但结果相同。
有什么想法吗?
感谢。
编辑:遵循将\ b扩展为
的建议(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))
如下所示:regex to match word boundary beginning with special characters
我已经达成了这个解决方案:
$html = preg_replace("/(?:(?<![\wÁÉÍÓÚáéíóúñÑ])(?=[\wÁÉÍÓÚáéíóúñÑ])|(?<=[\wÁÉÍÓÚáéíóúñÑ])(?![\wÁÉÍÓÚáéíóúñÑ]))".$match."(?:(?<![\wÁÉÍÓÚáéíóúñÑ])(?=[\wÁÉÍÓÚáéíóúñÑ])|(?<=[\wÁÉÍÓÚáéíóúñÑ])(?![\wÁÉÍÓÚáéíóúñÑ]))/", 'replace', $html);
在这里测试时效果很好:
http://sandbox.onlinephpfunctions.com/
但它在我的系统中不起作用,尽管我使用与沙箱中相同的PHP版本:(