这正则表达式谁懂啊

if(preg_match(‘/(.)\1{4,}/‘,$body)){
throw new \Exception(‘Your reply contains spam.’);

————————————————
原文作者:洛未必达
转自链接:50.垃圾内容检测机制(二)
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。

这个1{4,}前面是双反斜杠,,不知道为啥少显示一个

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
if (preg_match('/(.)\1{4,}/', 'AAAAABBBB', $matches)) {
    print_r($matches);
}
  • . 代表任意一个
  • (.) 代表我们需要的
  • \1 代表第一个 () 里的内容
  • {4,} 代表 4+ 次
3年前 评论
lyxxxh 3年前
aa24615 3年前
aa24615 3年前
sargerase (楼主) 3年前
aa24615

. 代表任意一个

(.) 代表我们需要的

\1 代表1 当然不加\ 也一样

{4,} 代表1必须 4+ 次

自己去测试

3年前 评论
Junwind 3年前
T468794949 3年前

file
匹配除换行符(\n、\r)之外的任何连续重复>4次的字符的字符

3年前 评论
Junwind 3年前
sargerase (楼主) 3年前
Junwind

最近学习Linux,盲说一下,还未测试

.   匹配任意单个字符
(.)  ()是分组,主要为了后面的 \1 来引用它所匹配的内容
\1   引用前面()内匹配的内容,即(.)匹配到的是什么,\1就是什么,比如是 a,那\1就是a,   \2就是引用第二个()内容
{4}  其前面的内容,最少出现4次

所以第一个匹配到是  a,  最终结果是  aaaa, aaaa... , 1111, 1111...
即,匹配的目标最终就是:匹配有四个以上的重复字符

经常我的测试,发现,最终其实是匹配5个以上的重复字符

Laravel

我发现没考虑到的地方是:(.) 是算一个字符的, \1{4,}是至少四个字符的,所以最终是至少有5个字符或以上

经过我在php里面执行匹配,发现和Linux的结果是一致的,即最终是匹配的是 : 等于或大于 5个以上连续相同的任意字符;PHP中测试如下:

Laravel

3年前 评论
Junwind (作者) 3年前
sargerase (楼主) 3年前
Junwind (作者) 3年前
sargerase (楼主) 3年前
Debuff

去跑一次啥都明白了 tool.chinaz.com/regex/

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!