我的PHP脚本中有一个正则表达式,如下所示:
/(\b$term|$term\b)(?!([^<]+)?>)/iu
这与$ term中包含的单词匹配,只要前面或后面有单词边界,并且它不在HTML标记内。
但是,这在非ASCII情况下不起作用,例如俄语文本。有没有办法让它发挥作用?
我可以用
获得几乎同样好的结果/(\s$term|$term\s)(?!([^<]+)?>)/iu
但这显然更有限,因为这个正则表达式是关于突出显示搜索词,所以它存在将空间包含在突出显示中的问题。
我已阅读this StackOverflow question about the problem,但它无效 - 无法正常工作。在该示例中,捕获是相反的方式(当我需要捕获搜索词时,捕获搜索词之外的文本)。
任何使这项工作的方法?谢谢!
答案 0 :(得分:0)
您可以使用zero-width lookahead/lookbehind assertions断言您所匹配的字母左右两边的字符是非字母吗?
答案 1 :(得分:0)
根据UTS#18的要求,\b
肯定被定义为在Unicode上运行得非常好。你在说什么不干嘛?涉及的确切文本字符串是什么?