⁧无论你使用的是Java、Python、Perl、PHP、GO 还是 Shell,正则表达式是学习主流编程语言几乎绕不开的话题。有了它,就能帮你快速定位到符合筛选条件的文本内容。

但对于初学者来说,有两座摆在面前的 “大山”:

  1. 正则表达式包含的符号种类非常多,如果只是死记硬背,学习起来会非常痛苦;
  2. 单独介绍正则表达式的中文图书资源非常少,而且存在介绍混乱的问题,不利于系统学习。

现在 GitHub 上的有个 2.9 万星的项目 learn-regex 解决了初学者的困难。
最近这个教程刚完成了汉化工作,还附有在线练习,帮助初学者快速入门正则表达式。

https://github.com/ziishaned/learn-regex

什么是正则表达式

正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子。

比如我们在网站中看到对用户名规则做出了如下限制:只能包含小写字母、数字、下划线和连字符,并且限制用户名长度在 3~15 个字符之间,如何验证一个用户名是否符合规则呢 ?我们使用以下正则表达式:

//用户名正则,4到16位(字母,数字,下划线,减号)
var uPattern = /^[a-zA-Z0-9_-]{4,16}$/;
//输出 true
console.log(uPattern.test("iFat3"));

项目内容

learn-regex 整个教程分为 6 节,内容比较简短,很快就能阅读完。

1. 基本匹配
2. 元字符
  2.1 点运算符 .
  2.2 字符集
    2.2.1 否定字符集
  2.3 重复次数
    2.3.1 * 号
    2.3.2 + 号
    2.3.3 ? 号
  2.4 {} 号
  2.5 (...) 特征标群
  2.6 | 或运算符
  2.7 转码特殊字符
  2.8 锚点
    2.8.1 ^ 号
    2.8.2 $ 号
3. 简写字符集
4. 零宽度断言(前后预查)
  4.1 ?=... 正先行断言
  4.2 ?!... 负先行断言
  4.3 ?<= ... 正后发断言
  4.4 ?<!... 负后发断言
5. 标志
  5.1 忽略大小写 (Case Insensitive)
  5.2 全局搜索 (Global search)
  5.3 多行修饰符 (Multiline)

教程从最简单的正则表达式入手,紧接着又介绍了核心内容元字符,然后由简到难介绍正则表达式的各种用法。
元字符

在线练习

如果你以为 learn-regex 只是个简单的汉化教程就大错特错了。learn-regex 之所以能获得 2.4 万星的高赞,还有个重要原因就是它提供了在线练习,直观地展示了正则表达式的匹配方式(真的炒鸡好用ヾ(≧▽≦*)o )。

https://regex101.com/

比如 (T|t)he 是如何匹配 The fat cat sat on the mat. 这句话中的几个单词的:

我们可以直观地看到以 T、h 开头并且紧跟 he 的单词都能很正则表达式匹配。
zz2
网页的右侧还会给出相应的解释:
zz3
如此操作,让人感觉要比枯燥的文字解释生动许多,大家不妨试玩一下。

我的学习备忘

点运算符 .
匹配任意单个字符,不匹配换行符,.xx匹配一个任意字符后面跟着是x和x的字符串.

表达式: /.
匹配到: The car parked in the garage.

表达式: /.ge
匹配到: The car parked in the garage.

字符集
字符集也叫做字符类. 方括号用来指定一个字符集. 在方括号中使用连字符来指定字符集的范围. 在方括号中的字符集不关心顺序.

表达式: /[Tt] he
匹配到: The car parked in the garage.

表达式: /[a-z]e
匹配到: The car parked in the garage.

方括号的句号就表示句号. 表达式 ar[.] 匹配 ar.字符串

表达式: /ge[.]
匹配到: The car parked in the garage.

Photo by Alex Montes from Pexels

最后修改:2024 年 05 月 12 日
如果觉得我的文章对你有用,请随意赞赏