欢迎大家在这篇文章下面评论留言,给出自己在日常 coding 的过程中写过的正则表达式,并给出说明和示例,注明对应的语言,如果能给出如何写出来的详细解释更好。
欢迎大家留言给出自己想要实现的正则表达式(注明语言),然后群友给 ta 解答。
欢迎大家“优化”已经留言的正则表达式。
我希望这篇文章成为所有 “讨厌” 和 “喜爱” 正则表达式的同学的聚集地,并最终能让所有人理解和熟悉正则表达式。

关于 2 和 3 ,为什么我不去问神奇的 GPT 呢

lua 语言,jdtls 取 Class 名称%[([%a%$_]?[%.%w%(%)"+,\_%[%]%s :%-@<>])%]%(jdt://1+%)测试字符 String

自从有了 ChatGPT 再也不用烦心正则怎么写了

/^(+|-)?\d+(.\d+)?(E(+|-)?\d+)?$/i我先来一个,这个表示所有 JavaScript 中的所有数字格式,可以带正负号,可以是整数,可以是浮点数,可以是带 E|e 的科学计数法格式。比如 “1” “+1” “-1” “-2.4879983487” “2.34E-2”(表示 2.34 * 10^-2 ,也就是 0.0234)“2.34e3”(表示 2340)

支持直接粘贴 chatgpt 的回答,也希望大家能帮 chatgpt 找 bug ,但我希望是 4 ,这个对大家作为 programmer 有帮助。

好酷,有空的时候欢迎给出详细的解释

/^-?\d+(.\d+)?(e-?\d+)?$/i/^-?\d+(\.\d+)?(e[+-]?\d+)?$/i #4 gpt3.5 的答案,不知道对不对

# 下面的正则是把用户输入的(无意义)大于 2 个字的重复的内容变成单个. 没想到有什么好的,简单的算法实现. 使用正则就比较简单.(python 代码)userInputText = """测试测试测试哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?"""import reregex = r"(?P.{2,100}?)(?P=r){2,}"subst = "\1"outputText = re.sub(regex, subst, userInputText, 0, re.MULTILINE)print("## input")print(userInputText)print("## output:")print(outputText)# 输出:## input测试测试测试哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?你在干嘛呢?## output:测试哈哈哈哈哈你在干嘛呢?

这个回答不支持开头为 “+” 的这种格式,比如 “+1”,覆盖范围不全

哈哈哈哈哈哈,你在干嘛呢?你在干嘛呢?测试!测试!

.1 似乎表示不了

还有三个特殊值 NaN +-Infinity

  1. 也表示不了,边界条件还是很多的

再推荐一个我一直在用的一个正则在线测试编写工具吧: regex101.com测试效果图: postimg.cc/XB0GyvM8

我觉得吧, 一定要把一个复杂的校验用一个正则写出来, 是有强迫症, 也不符合代码高可阅读性的准则把各个规则拆开校验, 性能又不会有很大的差距, 看起来还简单易懂, 后面的人改起来也方便

#5 请不要把 AI 生成的内容发送到这里 hesudu.com/about

regex.ai/

这种活交给 GPT 就挺好

(?<!\w)(err(er)?|fail(ed)?)(?!\w)一般会用来高亮日志里的错误

V2 明令禁止粘贴 AI 回复,我跑这来看你 gpt 生成的回答我为什么不直接问 gpt?

www.qaq.dad/posts/regex

存活十年?一会儿就好被封号了。。。

对于正则这种东西,你觉得 GPT 更可信还是去一个帖子里找到的更可信呢?

正则大全不好用了吗……- any-rule - Visual Studio Marketplace- any-rule - IntelliJ IDEs Plugin | Marketplace

我歪一下,翻页了怎么找呢?

正则真的适合人读吗

ihateregex.io/此帖终结??

看标题以为你是来请客,进来才发现你只带了口锅

正则表达式学习资源

#29 就是, 与其在这搜, 我为什么不直接问 ai

能随便手写正则的都是怪物,能随便看懂正则的是大怪物

正则这种东西即使是自己写的一周后都看不懂

regexp^(?=^(?:幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]){14,17}$)(?=(?:.\*\[鸡条\].\*\[万筒\].\*)|(?:.\*筒.\*\[万条鸡\].\*)|(?:.\*万.\*\[筒条鸡\].\*))(?=.\*\[幺一九中\].\*)(?=^(?:(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{2,3})|(?:幺鸡二条三条|一筒二筒三筒|幺万二万三万|(?:二(?\[条筒万\])三\\k 四\\k)|(?:三(?\[条筒万\])四\\k 五\\k)|(?:四(?\[条筒万\])五\\k 六\\k)|(?:五(?\[条筒万\])六\\k 七\\k)|(?:六(?\[条筒万\])七\\k 八\\k)|(?:七(?\[条筒万\])八\\k 九\\k))|(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k))\*(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{2,3})(?:(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{2,3})|(?:幺鸡二条三条|一筒二筒三筒|幺万二万三万|(?:二(?\[条筒万\])三\\k 四\\k)|(?:三(?\[条筒万\])四\\k 五\\k)|(?:四(?\[条筒万\])五\\k 六\\k)|(?:五(?\[条筒万\])六\\k 七\\k)|(?:六(?\[条筒万\])七\\k 八\\k)|(?:七(?\[条筒万\])八\\k 九\\k))|(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k))\*$)(?=^(?!(?:.\*(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{3}.\*){4,}).\*$)(?:(?:(?:(?:幺鸡二条三条|一筒二筒三筒|幺万二万三万|(?:二(?\[条筒万\])三\\k 四\\k)|(?:三(?\[条筒万\])四\\k 五\\k)|(?:四(?\[条筒万\])五\\k 六\\k)|(?:五(?\[条筒万\])六\\k 七\\k)|(?:六(?\[条筒万\])七\\k 八\\k)|(?:七(?\[条筒万\])八\\k 九\\k)))|((?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{2,3}))\*(?:(?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k)(?:((?:幺鸡二条三条|一筒二筒三筒|幺万二万三万|(?:二(?\[条筒万\])三\\k 四\\k)|(?:三(?\[条筒万\])四\\k 五\\k)|(?:四(?\[条筒万\])五\\k 六\\k)|(?:五(?\[条筒万\])六\\k 七\\k)|(?:六(?\[条筒万\])七\\k 八\\k)|(?:七(?\[条筒万\])八\\k 九\\k)))|((?(幺鸡|一筒|幺万|红中|\[二三四五六七八九\]\[条筒万\]))\\k{2,3}))\*)$匹配麻将和牌的正则表达式: dallas.lu/mahjong-regex/

简单的正则直接手写,复杂的拆成几个特例写几个子匹配,然后套个 (?: ) 和|就行了

🤣我还以为是有人挖坟贴

日麻有一套比较直观的麻将牌以字符串形式的表达方式。详见 tenhou.net/2/简单来说,麻将牌种类是索子( s )、筒子( p )、万字( m )、字牌( z ),每种各 9 张,编号 1~9 ,日麻规则有红宝牌记为 0 ( 3 红规则每种数牌的各一张 5 ,或者 4 红规则 2 张红 5 筒子)。举例来说,113479m4688p3s24z3s ,24z 分别对应南北,其他的数牌也很一目了然。在这个规则下对字符串进行解析就相对不需要做到那么复杂。回复这个是因为我在想,对于这个需求,设计的时候就不应该直接把汉字弄到判断和牌的这一步来。这样写多少有些杂耍了。而且这样的一长串正则只能做到一个功能,我如果想要计算最快听牌方式就完全不能复用其中的阶段性的结果。

不要用 \d ,用 [0-9]

哈哈哈,有锅也有菜。你是带着碗来的,结果没找到合适的菜?

如果要把 “1.” 和 “.1” 都囊括进来,感觉只能取其一

认可!能用可读性更高的代码建议用可读性更高的代码,但是这个帖子的目的不是为了强调可读性。有些场景只能使用正则表达式,这个帖子为了让会的人炫技,为了让不会的人找到可以求助的地方,看的多了就会了

抱歉忘记这一条规则了。不过我理解 ai 生成的内容主要针对的是自然语言和一些具有纯解答性质的文字,不是针对这类的讨论

都可信,如果你能读懂的话

看的多了就能看懂了

why ?

感谢认真的思考和回复


  1. %)