非ASCII的情况下正则表达式字边界
我有我的PHP脚本像这样的正则表达式:非ASCII的情况下正则表达式字边界
/(\b$term|$term\b)(?!([^<]+)?>)/iu
这包含在$期限匹配单词,只要有之前或之后和单词边界它不在HTML标签内。
然而,这并不非ASCII情况下工作,例如与俄文本。有没有办法让它工作?
我可以得到几乎一样好结果与
/(\s$term|$term\s)(?!([^<]+)?>)/iu
但这显然更加有限,因为这个正则表达式是关于突出搜索词,它包括在高亮的空间的问题。
我读过this StackOverflow question about the problem,但它并不能帮助 - 无法正常工作。在那个例子中,捕获是相反的方式(当我需要捕获搜索词时,捕获搜索词以外的文本)。
什么办法,使这项工作?谢谢!
的\b
肯定定义为Unicode的很好的工作,如由UTS#18必需的。你在说什么没有做?什么是确切的文本字符串?
代码来自WordPress搜索插件,如果搜索词不完全在另一个词的内部(而不是在HTML标签内),则应搜索所有搜索词的所有发生。 – 2011-04-15 03:36:26
从本文中,搜索“програ”与正确匹配“\bпрогра|програ\ b “。 програВопредлагаюэлектроннойтам。 Сталлучшеплатформумытам,рукипринятьньюпо,работемешаютдниза.програСпольскипрограммыбезусловноихбез。 Триможетобычнобы,большеразныевыгде。 Дветобудучёртовфактически,работатьпреодолетьпоко。 Томвнешнихзакончитьбезответственныйты。 Кремнияпрограэлектпрограроннойневсю,томдодураккоманды。 Обтдвашихпрограммировать,нонасинтервьюпроцессорах。 – 2011-04-16 05:49:12
@Mikko,我相信我知道发生了什么事情。我只是尝试使用Perl,它应该与PHP中的preg匹配相同。以下是该协议:**当且仅当**您将字符串和模式存储为UTF-8时,它正确匹配,但如果这些文字被视为字节而不是字符,则相同模式无法匹配。在Perl中,您只需在程序的顶部说'use utf8;',然后所有的字符串操作符(包括匹配)就可以很好地与这些UTF-8文字一起工作。 (我们没有两种口味的操作。)但如果你*不这样做,它会“神秘地”失败。这可能是你的问题吗? – tchrist 2011-04-16 06:35:22
谢谢。我结束了这个: /(?)/ iu 它工作得很好,但我该怎么做另一个我试过 (?)/ iu 但这不起作用嗯,这并不重要 - 我甚至不确定匹配出现在单词末尾的术语是个好主意 – 2011-04-15 03:54:38