如何练习正则

2016-03-03 16:17:00 +08:00
 yuedingwangji

之前就听说过正则的强大,一直想学习,但总是粗略的看一下就过,总是半桶水的状态,结果是学了就忘, 到真正要用到的时候就一脸懵逼了。最近开始重拾心态,决定好好学习,天天向上了。
看了正则表达式必知必会 的 PDF 书,感觉讲的书法基本都懂,但找不到东西好练手的,感觉不练手的话,估计不到 2 天又忘光了。
"实践是检验真理的唯一标准",只要动手练,才知道自己掌握得如何了。
so,望 V 友指点如何动手连,或者说说你们当时都是怎么学正则的

2492 次点击
所在节点    正则表达式
19 条回复
Tink
2016-03-03 16:19:45 +08:00
我觉得这货好难。。大概是我用的少
terence4444
2016-03-03 16:20:39 +08:00
把其中的代码含义理解一下,然后备个 Cheat Sheet ,等用的时候再对照即可。
imn1
2016-03-03 16:26:23 +08:00
浏览器找个支持正则搜索的扩展取代内置的搜索,经常用就好了
Strikeactor
2016-03-03 16:28:57 +08:00
http://regex.alf.nu/ 专门用来练手的
YuJianrong
2016-03-03 16:30:15 +08:00
虽然自己有在用,不过我还是想知道这东西主要有什么用处的?
我自己感觉我学的那部分(就是最常见的正则语法,没有 lookaround 什么的)简单得简直不用学,而且也没多大用处,很多时候还是要代码处理字符串。
v1024
2016-03-03 17:09:13 +08:00
florije
2016-03-03 17:15:14 +08:00
这么巧也在学习正则,分享下我的学习方法,正巧是在熟练爬虫的过程中想到正则的高大上,所以就可以不用 bs4 或者框架提供的方法,而是自己手写正则匹配,已经练习了 4-5 个网站了,感觉顺手多了,实际解决问题中用正则比为了学而学要牢靠一些吧。
yeyeye
2016-03-03 17:19:23 +08:00
楼主你好,学正则其实是不难的,难的是改正则,改别人写好了的正则……
GPU
2016-03-03 17:33:39 +08:00
主要是我看了不下 3 次的正则教学 ,基本上每一次再用我都是要再查一次。

因为不是常用啊 。
zerofzt
2016-03-03 17:33:49 +08:00
8 楼正解
话说 linux 的流处理的正则跟 java 和 python 这类的感觉好像有点差别?
liberize
2016-03-03 17:35:07 +08:00
@YuJianrong

我觉得还是相当有用的,我经常用 Sublime Text 里面的正则查找和替换,另外折腾爬虫、机器人啥的也经常用。

随便举几个例子,

1. 前几天从 SubHD 下一个字幕文件,里面字幕经常有一些换行,我需要把这些这些换行去掉:

87
00:02:55,156 --> 00:02:56,289
The items on
the second floor

88
00:02:56,291 --> 00:02:57,557
have to be
more expensive

然后就在 Sublime Text 里面随手用正则替换掉了,把 (?<!\d)\n(?![\n\d]) 替换为空

2. 昨天整了个机器人,需要从 <script> 标签里提取跳转地址,然后也用了正则,查找 setTimeout\("top\.location\.href = '(.*?)';", (\d+)\); 并提取 group(1),还有一个需要从邮件里提取 pass code ,用了 Secret Code - (\w+)\r\n 提取 group(1)

3. 我 GitHub 上有一个 alfred 查词扩展,解析系统词典,之前不知道可以用私有 api 得到 html 格式的释义,就用正则去处理纯文本释义,相当复杂,简直要吐了,不过最后结果还可以
sennes
2016-03-03 18:40:02 +08:00
分享一下我的一个书签:http://regex.alf.nu/ 你就当做游戏练练手吧
lotem
2016-03-03 18:42:05 +08:00
模糊查詢,批量替換,非常好用。
又有俺巧用正則製作輸入法的獨門絕活: https://github.com/rime/home/wiki/SpellingAlgebra
YuJianrong
2016-03-03 20:02:04 +08:00
@liberize 1. 编辑器下使用感觉不算在编程里面。虽然我也常用 vim 的扩展正则做替换(很巧也处理过字幕换行),不过感觉和程序里不一样。

2. 程序里使用的话,就比如上面 Script 标签内容的处理,对于移植格式的文本倒有点用(比如阁下的例子),但复杂一点的处理,还是得上专门的方法( XML 要 parse 成 dom , JS 可以 esprima 编译成 ast ),用正则处理感觉过于 tricky ,自己都很难信任这段代码能在所有场景下正常工作(就像阁下最后一个例子),这种情形我就很不喜欢写正则了。

所以我写的正则都是比较简单的那种,不会用正则处理大量复杂的文本。
yuedingwangji
2016-03-03 23:44:02 +08:00
太谢谢各位了 !
digimoon
2016-03-03 23:49:07 +08:00
有没有图形化排列条件什么的然后生成正则式子的软件?
zhangbohun
2016-03-04 00:05:56 +08:00
Strikeactor
2016-03-04 00:49:30 +08:00
shiny
2016-03-04 01:13:20 +08:00
写个模板引擎,并且坚持改 bug

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

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

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

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

© 2021 V2EX