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

如何练习正则

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

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

    19 条回复    2016-03-04 01:13:20 +08:00
    Tink
        1
    Tink  
       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  
       2016-03-04 01:13:20 +08:00
    写个模板引擎,并且坚持改 bug
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1063 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.