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

2020-08-11 12:29:35 +08:00
 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 等可以正常解析。

错误的结果

正确的解析结果

2042 次点击
所在节点    问与答
9 条回复
gz911122
2020-08-11 13:20:47 +08:00
截图的那个正则网站是啥, 看起来不错啊
dsphper
2020-08-11 13:25:09 +08:00
@gz911122 regex101
CismonX
2020-08-11 13:59:11 +08:00
这个是引擎不识别 unicode 字符的问题。改成:

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

就没问题了。
iyaozhen
2020-08-11 14:45:25 +08:00
不要见风就是雨

/u
才能识别中文
vc1
2020-08-11 18:12:42 +08:00
执行 php 代码的图是哪个网站
dsphper
2020-08-11 18:19:28 +08:00
@iyaozhen
以感谢老哥
dsphper
2020-08-11 18:20:20 +08:00
@CismonX 4 楼老哥解决方法简单粗暴。
dsphper
2020-08-11 18:28:00 +08:00
@vc1 3v4l
azh7138m
2020-08-11 19:57:04 +08:00
@iyaozhen 不要见着风是得雨

你们这样子不行的

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

https://www.v2ex.com/t/697334

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

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

© 2021 V2EX