实地演练

真实文本——收据、日志、邮件——用一个正则综合运用你学过的一切:字符类、量词、锚点和分组。

反复操练:真实格式 →

本课程建立在高尔夫技巧之上

你将学到

价格与金额 邮箱与话题标签 日志与状态码 日期 综合运用

步骤 · 12

  1. 01走进实地讲解
  2. 02读收据狩猎
  3. 03抓取邮箱狩猎
  4. 04校验用户名狩猎
  5. 05筛查日志狩猎
  6. 06找出话题标签狩猎
  7. 07匹配 24 小时制时间狩猎
  8. 08读更新日志狩猎
  9. 09校验十六进制颜色狩猎
  10. 10轮到你了狩猎
  11. 11实地高尔夫狩猎
  12. 12实地演练完成讲解

真实文本中的正则:日志、收据和邮件

真实文本很杂乱。收据里混着商品名、价格和日期;服务器日志把时间戳、级别和消息塞进一行;邮件里有邮件头、引用和签名。在真实文本上用正则,就是要在这些杂音里找出你需要的片段,而不是检查一个干净的值。

这正是各项基础汇合的地方。字符类挑选字符,量词决定数量,锚点或 \b 固定匹配的起止位置,带 | 的分组列出人们实际会写出的各种变体。在这个课程里,你要在真实片段中高亮价格、邮箱和日期,顺带校验几种格式。

用看起来像你自己数据的文本来练习。复制几行真实数据,把难搞的那几行也放进去,既要看正则点亮了什么,也要看它漏掉了什么。在三行整齐数据上管用的正则,常常在第四行就失手。

示例

  1. /^(ERROR|WARN)\b/

    抓住

    • ERROR disk full
    • WARN slow query

    放过

    • INFO user saw ERROR
    • WARNING: low disk

    ^ 让级别必须位于行首,\b 防止 WARNING 被当成 WARN。

  2. /\bORD-\d{4,}\b/

    抓住

    • Order ORD-20481
    • ref ORD-1234 paid

    放过

    • ORD-12
    • WORD-5000

    \b 把 WORD-5000 挡在外面,{4,} 要求至少四位数字。

  3. /\d+([.,]\d+)?%/

    抓住

    • save 15%
    • VAT 7.5%
    • tax 7,5%

    放过

    • 15 percent
    • page 2

    可选的分组让一个正则就能读出 15%、7.5% 和欧洲写法 7,5%。

  4. /^(re|fwd?):/i

    抓住

    • Re: invoice
    • FWD: menu
    • fw: slides

    放过

    • Review: draft
    • Invoice re: May

    i 标志涵盖 Re、RE 和 re,^ 则忽略出现在邮件主题中间的 re:。

常见错误

  • 在更长的内容里误匹配。 \d{4} 能找到年份,但也会找到电话号码或订单号里的四位数字;加上 \b 或周围的文本来固定它。
  • 让 `. * 失控。它是贪婪的,所以在含有两对括号的行上,\(.*\) 会从第一个 ( 一直抓到最后一个 );用 [^)]*` 这样的字符类就能停在第一个。
  • 只测试整齐的行。 真实数据里有多余的空格、混杂的大小写和缺失的字段,所以也要用难看的行来测试,并决定哪些行要放过。

反复操练:真实格式 →

延伸阅读:实战校验 →

延伸阅读:邮箱正则:可直接复制、真正好用的写法 →

延伸阅读:电话号码正则:美国格式、E.164,以及何时该停手 →