如果单词以重音字母开头,则正则表达式不匹配单词边界

时间:2017-02-13 12:46:47

标签: php regex utf-8

我正在尝试使用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ó"
“salió”不匹配。任何其他以匹配字母开头或结尾的$匹配也不匹配。

这与此处可以观察到的行为相同:

https://regex101.com/

我尝试过使用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版本:(

0 个答案:

没有答案