php - 非 ASCII 情况下的正则表达式单词边界

我的 PHP 脚本中有一个正则表达式,如下所示:

/(\b$term|$term\b)(?!([^<]+)?>)/iu

这与 $term 中包含的单词匹配,只要前后有单词边界并且它不在 HTML 标记内即可。

但是,这在非 ASCII 情况下不起作用,例如俄语文本。有没有办法让它发挥作用?

我可以用

得到几乎一样好的结果
/(\s$term|$term\s)(?!([^<]+)?>)/iu

但这显然更受限制,并且由于此正则表达式是关于突出显示搜索词的,因此它存在突出显示中包含空格的问题。

我读过 this StackOverflow question about the problem ,但它没有帮助 - 无法正常工作。在那个例子中,捕获是相反的(当我需要捕获搜索词时,捕获搜索词之外的文本)。

有什么方法可以让它工作吗?谢谢!

最佳答案

你可以使用 zero-width lookahead/lookbehind assertions断言您要匹配的内容左右两侧的字符不是字母?

https://stackoverflow.com/questions/5667226/

相关文章:

database-design - 如何在此文件系统模型中找到节点(文件或目录)的绝对路径

ruby-on-rails - 运行请求规范时显示服务器输出

asp.net - 在 asp.net 中删除给定字符串中 img 标签的宽度和高度

python - 如何使用 os.environ 在 python 中设置时区

image - 视频流中扑克牌的 OCR

wpf - 是否可以在没有行的 DataGrid 中显示水平滚动条?

vb.net - 在哪里保留结构 : class, 模块或没有?

php - 如何在 PHP 中获取特定周的天数?

python - 使用另一个 python 文件修改/替换 python 文件中的一行

gcc - 在 Windows 上使用调试符号构建 GCC 的 libstdc++