PHP正确的正则表达式在带有unicode的PHP 5.3.3-7中不起作用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP正确的正则表达式在带有unicode的PHP 5.3.3-7中不起作用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1851字,纯文字阅读大概需要3分钟。
内容图文
![PHP正确的正则表达式在带有unicode的PHP 5.3.3-7中不起作用](/upload/InfoBanner/zyjiaocheng/771/23b553205c7d444ba680d225538ee2d1.jpg)
我正在尝试将这个正则表达式用于查找句子中的两个单词.
echo (int)preg_match('/\bHello\W+(?:\w+\W+){0,6}?World\b/ui', 'Hello, world!', $matches).PHP_EOL;
print_r($matches);
它完美地运作:
1
Array
(
[0] => Hello, world
)
……但只有拉丁语.如果我切换到unicode,它找不到任何东西.也没有必要查看语法,因为它来自a book(第8章“找到彼此接近的两个单词”).问题是它只适用于拉丁语单词,但不适用于像这样的unicode字符串:’Прив?т,св?ту!’ (乌克兰语)
我检查了几乎所有可能的问题:
?我在正则表达式模式中使用’u’标志.
?我在执行此语句之前在代码中启用了UTF-8支持,如下所示:
ini_set('default_charset', 'UTF-8');
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
?我在Debian Linux上的PCRE编译正确:
# pcretest -C
PCRE version 8.02 2010-03-19
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack
?我甚至尝试将这个奇怪的序列(* UTF8)添加到模式according to this answer中,但它没有帮助:
06004
结果:
0
Array
(
)
所以我的问题是:为什么unicode不能在这里工作,因为它完全适用于我在同一代码中使用的其他unicode模式?它们有点简单,像这样:
echo (int)preg_match('/Прив?т/ui', 'Прив?т, св?ту!', $matches).PHP_EOL;
print_r($matches);
这令人惊讶的工作:
1
Array
(
[0] => Прив?т
)
最后很有趣它在online regex tester完全正常(这就是为什么我实际上非常沮丧,我测试了它然后期望在我的代码中工作,但它没有).
哦明智的Stackoverflow,请给他一个提示.
解决方法:
我有一个类似的问题,发现模式中的UTF-8符号不适用于某些版本的PHP.甚至当时的5.3版也有这个问题.在这里查看你的例子:http://3v4l.org/7HurJ.根据那个测试,你必须至少有5.3.4才能使用这个模式,但我认为,版本号在这里并没有多大意义.也许,它实际上取决于一些编译选项,或者可能有一个解决方法,但我没有深入挖掘并简单地调整我的方法不在表达式中使用任何“有趣”的符号.
内容总结
以上是互联网集市为您收集整理的PHP正确的正则表达式在带有unicode的PHP 5.3.3-7中不起作用全部内容,希望文章能够帮你解决PHP正确的正则表达式在带有unicode的PHP 5.3.3-7中不起作用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。