如何练习正则 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuedingwangji
V2EX    正则表达式

如何练习正则

  •  
  •   yuedingwangji 2016-03-03 16:17:00 +08:00 2967 次点击
    这是一个创建于 3554 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    因为不是常用啊 。
    zerofzt
        10
    zerofzt  
       2016-03-03 17:33:49 +08:00
    8 楼正解
    话说 linux 的流处理的正则跟 java 和 python 这类的感觉好像有点差别?
    liberize
        11
    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
        12
    sennes  
       2016-03-03 18:40:02 +08:00
    分享一下我的一个书签:http://regex.alf.nu/ 你就当做游戏练练手吧
    lotem
        13
    lotem  
       2016-03-03 18:42:05 +08:00
    模糊查,批量替,非常好用。
    又有俺巧用正作入法的活: https://github.com/rime/home/wiki/SpellingAlgebra
    YuJianrong
        14
    YuJianrong  
       2016-03-03 20:02:04 +08:00
    @liberize 1. 编辑器下使用感觉不算在编程里面。虽然我也常用 vim 的扩展正则做替换(很巧也处理过字幕换行),不过感觉和程序里不一样。

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

    所以我写的正则都是比较简单的那种,不会用正则处理大量复杂的文本。
    yuedingwangji
        15
    yuedingwangji  
    OP
       2016-03-03 23:44:02 +08:00
    太谢谢各位了 !
    digimoon
        16
    digimoon  
       2016-03-03 23:49:07 +08:00
    有没有图形化排列条件什么的然后生成正则式子的软件?
    zhangbohun
        17
    zhangbohun  
       2016-03-04 00:05:56 +08:00
    Strikeactor
        18
    Strikeactor  
       2016-03-04 00:49:30 +08:00
    shiny
        19
    shiny  
    PRO
       2016-03-04 01:13:20 +08:00
    写个模板引擎,并且坚持改 bug
    关于     帮助文档     自助推广系统     博客     API &nsp;   FAQ     Solana     4180 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:15 PVG 08:15 LAX 16:15 JFK 19:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86