狩猎入门

每个正则的两个基本构件:字面文本和通配符点号——以及正则如何匹配字符串中的任意位置。

阅读规则:指南中的“字面字符” →反复操练:正则特训 →

你将学到

字面字符 随处匹配 点号 多个点号

步骤 · 9

  1. 01欢迎你,猎手讲解
  2. 02字面字符示例
  3. 03你的第一次狩猎狩猎
  4. 04随处匹配狩猎
  5. 05点号:任意字符狩猎
  6. 06处处通配狩猎
  7. 07不止一个点狩猎
  8. 08毕业狩猎狩猎
  9. 09入门完成讲解

正则入门:字面字符与点号

正则表达式(regex)是一段描述文本的简短规则。把一个字符串交给它,它只回答一个问题:这里面有没有匹配?在 Regex Hunter 里,这个答案决定了你的狩猎:正则必须抓住每个目标单词,放过每个无辜词。JavaScript、Python、各种搜索工具和大多数代码编辑器都内置了正则,所以在这里学到的东西,用处远不止这个游戏。

大多数正则都从字面字符开始。正则里的字母或数字就代表它自己,所以 ink 会依次寻找 i、n、k 三个字母,而不管它们出现在哪里。没有额外标记时,正则可以在字符串的任意位置匹配,这就是 ink 也能找到 pinky 和 inkwell 的原因。

第二个基本构件是点号。. 用任意单个字符填充一个位置:字母、数字、空格或符号都行。t.p 能匹配 tip、top 和 t-p,却永远匹配不了 tp,因为点号总是恰好占一个字符。连写几个点号,就能描述一段固定长度的间隔。字面文本和通配符这两个概念,是你今后写出的每个正则的基础。

示例

  1. /ing/

    抓住

    • sing
    • ringer
    • kingdom

    放过

    • sign
    • grin

    字面字符按顺序匹配,可以出现在单词的开头、中间或结尾。

  2. /b.g/

    抓住

    • bag
    • bug
    • debug

    放过

    • bang
    • gab

    点号恰好代替 b 和 g 之间的一个字符,所以中间隔着两个字符的 bang 会被放过。

  3. /r..d/

    抓住

    • road
    • bread
    • rinds

    放过

    • red
    • rapid
    • dark

    两个点号就是恰好两个字符,所以 r 和 d 之间必须正好隔着两个字符。

  4. /3\.5/

    抓住

    • 3.5
    • v3.5.1

    放过

    • 305
    • 35

    反斜杠让点号变回普通的句点。

常见错误

  • 忘了正则可以在任意位置匹配。 art 也会抓住 start 和 party,所以要检查那些你本想放过的较长单词。
  • 把 `. 当成句点。它匹配任意字符,所以 1.5 也能匹配 125 和 1x5;要匹配真正的点号,请写 \.`。
  • 以为大小写无所谓。 正则默认区分大小写,apple 匹配不到 Apple;加上 i 标志即可忽略大小写。

阅读规则:指南中的“字面字符” →反复操练:正则特训 →