PHP 正则引擎 bug,通杀 PHP 所有版本。

2020 年 8 月 11 日
 dsphper

$re = '/@([^@\s::]+)[:| |:]+/m';
$str = '@多阿斯顿撒 2111 撒奥:asdsada @asdsadsadsad 阿斯顿撒大:@阿斯顿撒大所:@阿斯顿撒多撒多撒 sad 撒大撒多';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);

测试了下所有版本的 php 解析的结果都是错误的,其他语言 Python,Js 等可以正常解析。

错误的结果

正确的解析结果

2359 次点击
所在节点    问与答
9 条回复
gz911122
2020 年 8 月 11 日
截图的那个正则网站是啥, 看起来不错啊
dsphper
2020 年 8 月 11 日
@gz911122 regex101
CismonX
2020 年 8 月 11 日
这个是引擎不识别 unicode 字符的问题。改成:

$re = '/(*UTF8)@([^@\s::]+)[:| |:]+/m';

就没问题了。
iyaozhen
2020 年 8 月 11 日
不要见风就是雨

/u
才能识别中文
vc1
2020 年 8 月 11 日
执行 php 代码的图是哪个网站
dsphper
2020 年 8 月 11 日
@iyaozhen
以感谢老哥
dsphper
2020 年 8 月 11 日
@CismonX 4 楼老哥解决方法简单粗暴。
dsphper
2020 年 8 月 11 日
@vc1 3v4l
azh7138m
2020 年 8 月 11 日
@iyaozhen 不要见着风是得雨

你们这样子不行的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/697334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX