大家都是怎么练习正则表达式的呢?

2018-12-28 21:55:32 +08:00
 szzhiyang

我相信,想问这个问题的 V 友不止我一个。

13007 次点击
所在节点    程序员
92 条回复
wobuhuicode
2018-12-29 11:02:07 +08:00
没把规则记清楚,写太多也没用
zhaogaz
2018-12-29 11:10:30 +08:00
额,先理解正则的设计模型。

我理解的正则里面就是,做限定的,是什么,不是什么,要么是给定范围,或者,多次重复,单次重复啊,匹配字符串前后用零宽断言啊。

理解模型之后,剩下的就是查手册了。 找自己需要的东西。
geelaw
2018-12-29 11:14:38 +08:00
@bumz #45 我没有做很强的表达式优化,写出了一个长达 62.1 MB ( 65,152,515 个字符)的正则表达式匹配 13 的倍数(只匹配不带前导零、不带符号的正数)。输出的表达式使用计算机科学的常用语法(只用 | OR, () GROUP 和连接、空串)。

https://gist.github.com/GeeLaw/be3aec94a6ba7c3817ef2e16d261f616

匹配 3 的倍数是:

(((2|5|8)(0|3|6|9)*(2|5|8)|1|4|7)((1|4|7)(0|3|6|9)*(2|5|8)|0|3|6|9)*((1|4|7)(0|3|6|9)*(1|4|7)|2|5|8)|(2|5|8)(0|3|6|9)*(1|4|7)|3|6|9)(((2|5|8)(0|3|6|9)*(2|5|8)|1|4|7)((1|4|7)(0|3|6|9)*(2|5|8)|0|3|6|9)*((1|4|7)(0|3|6|9)*(1|4|7)|2|5|8)|(2|5|8)(0|3|6|9)*(1|4|7)|0|3|6|9)*

注意该程序经常输出非最优解,例如对于 5 的倍数,最简单的解是 5|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(5|0),该程序输出的是一个长达 2899 字符的表达式。
afirefish
2018-12-29 11:32:10 +08:00
amwyyyy
2018-12-29 11:32:24 +08:00
分享下公司同事的分享,里面有些练习题挺不错的
amwyyyy
2018-12-29 11:32:31 +08:00
blueskea
2018-12-29 12:15:39 +08:00
用时一时爽,写多了写长了,维护起来是恶梦
Jex
2018-12-29 12:17:43 +08:00
@geelaw

正则表达式匹配 N 的倍数

https://jex.im/programming/triple-regex.html
reself
2018-12-29 13:06:55 +08:00
@usingnamespace 抱歉确实我说得太笼统了,为了学个正则去学一遍编译原理确实走偏了。就正则而言,只需要学编译原理里的词法那里就行了。再深入下去就是自动机,这个看个人需求了。相对于强记硬背那些鬼画符,从编译原理里选择性的学习是没错的。你觉得呢?
freedom1988
2018-12-29 13:14:50 +08:00
把学到的先记录总结,在用到的时候再查看,周而复始就会越来越熟练。可以参考此处 https://www.cnblogs.com/strick/category/907150.html
veightz
2018-12-29 13:20:43 +08:00
收藏一个适合自己的手册和一个实时测试工具
kaiser1992
2018-12-29 13:22:05 +08:00
形式化语言,把 NFA 和 DFA 撸一遍,再理解正则,应该记起来就快了
kaiser1992
2018-12-29 13:22:55 +08:00
@Honwhy 是啊,其实把语法搞明白也就好了
realkenshinji
2018-12-29 13:28:18 +08:00
Copy & Paste from Stackoverflow
hujianxin
2018-12-29 13:38:46 +08:00
平时多用 sed、vim,用着用着就忘不掉了
MarioLuisGarcia
2018-12-29 13:43:40 +08:00
有真实需要的“练习”是最高效的
LichMscy
2018-12-29 14:47:50 +08:00
arthasgxy
2018-12-29 14:55:00 +08:00
多用 vim
stzz
2018-12-29 15:31:22 +08:00
你们楼上的贴的都是啥鬼画符啊
xavierskip
2018-12-29 16:21:09 +08:00
用的不多,要用的时候就看看 7 楼的图,然后在线调试工具上试一试呗。

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

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

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

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

© 2021 V2EX