Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 非ASCII情况下的Regexp字边界_Php_Regex_Unicode - Fatal编程技术网

Php 非ASCII情况下的Regexp字边界

Php 非ASCII情况下的Regexp字边界,php,regex,unicode,Php,Regex,Unicode,我的PHP脚本中有一个正则表达式,如下所示: /(\b$term|$term\b)(?!([^<]+)?>)/iu /(\b$term |$term\b)(?!([^)/iu 这与$term中包含的单词相匹配,只要前后有一个单词边界,并且它不在HTML标记中 但是,这在非ASCII的情况下不起作用,例如在俄语文本中。有没有办法使它起作用 我可以得到几乎同样好的结果 /(\s$term|$term\s)(?!([^<]+)?>)/iu /(\s$term |$term

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

/(\b$term|$term\b)(?!([^<]+)?>)/iu
/(\b$term |$term\b)(?!([^)/iu
这与$term中包含的单词相匹配,只要前后有一个单词边界,并且它不在HTML标记中

但是,这在非ASCII的情况下不起作用,例如在俄语文本中。有没有办法使它起作用

我可以得到几乎同样好的结果

/(\s$term|$term\s)(?!([^<]+)?>)/iu
/(\s$term |$term\s)(?!([^)/iu
但这显然是更有限的,因为这个regexp是关于突出显示搜索词的,所以它有在突出显示中包含空格的问题

我已经读过了,但它没有帮助-无法正常工作。在该示例中,捕获是另一种方式(捕获搜索词之外的文本,当我需要捕获搜索词时)


有什么办法可以做到这一点吗?谢谢!

你可以用它来断言你要匹配的东西的左右两侧的字符都是非字母?

这个
\b
的定义当然可以在Unicode上很好地工作,这是UTS#18所要求的。你说它没有做什么?具体涉及的文本字符串是什么de来自WordPress搜索插件。它将浏览帖子内容,并应在搜索词不完全位于另一个单词内(且不在HTML标记内)的情况下提取搜索词的所有内容。从该文本中,搜索“ПППППППППППППППППППППа\b”与“\bПППППППППППППППППП. програ Во предлагаю электронной там. Стал лучше платформу мы там, руки принять нью по, работе мешают дни за.програ Спольски программы безусловно их без. Три может обычно бы, больше разные вы где. Две то буду чёртов фактически, работать преодолеть по кто. Том внешних закончить безответственный ты. Кремнияпрогра электпрограронной не всю, том до дурак команды. Об тд ваших программиааа,ааааааа,аааааааааааааааааааааа在Perl中,您只需在程序顶部说
使用utf8;
,然后所有的字符串操作,包括匹配,都可以很好地处理这些UTF-8文本。(我们没有两种类型的操作。)但是如果您不这样做,它“神秘地”失败。这可能是你的问题吗?@Mikko:看起来你必须在PHP中使用
/u
,让它意识到它是在处理Unicode。哎哟。是的,正如你从我最初的regexp中看到的,我正在使用/u-但它没有帮助。“即使在UTF-8模式下,像\w和\b这样的标准类速记也不知道Unicode。”艾伦·摩尔说。谢谢。我最后得到了这个:/(?)?