n1cef1sh's Blog

WHAT IS

一个正则表达式是一种从左到右匹配主体字符串的模式。 我们常使用缩写的术语“regex”或“regexp”。
正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。

最简单的一个例子就是设定一个用户命名的规则,让用户名包含字符、数字、下划线和连字符,以及限制字符的个数。

能做什么

  1. 测试字符串内的模式。
    例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  2. 替换文本。
    可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  3. 基于模式匹配从字符串中提取子字符串。
    可以查找文档内或输入域内特定的文本。

1、元字符

image.png

针对个别元字符做解释。

"[^c]ar"

The car ++par++ked in the ++gar++age.

"\s*cat\s*"

The fat ++cat++ sat on the con++cat++enation.

2、简写字符集

image.png

3、零宽度断言

image.png

?=…正先行断言

?=… 正先行断言,表示第一部分表达式之后必须跟着 ?=…定义的表达式。
返回结果只包含满足匹配条件的第一部分表达式。 定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=…)。

(T|t)he(?=\sfat)

++The++ fat cat sat on the mat.

?!…负先行断言

负先行断言 ?! 用于筛选所有匹配结果,筛选条件为 其后不跟随着断言中定义的格式。

(T|t)he(?!\sfat)

The fat cat sat on ++the++ mat.

?<= …正后发断言

正后发断言 记作(?<=…) 用于筛选所有匹配结果,筛选条件为 其前跟随着断言中定义的格式。

(?<=(T|t)he\s)(fat|mat)

The ++fat++ cat sat on the ++mat++.

?<!… 负后发断言

负后发断言 记作 (?<!…) 用于筛选所有匹配结果,筛选条件为 其前不跟随着断言中定义的格式。

(?<!(T|t)he\s)(cat)

The cat sat on ++cat++.

4、标志

image.png

5、贪婪匹配Greedy和惰性匹配Lazy

正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。

/(.*at)/

++The fat cat sat on the mat++.

/(.*?at)/

++The fat++ cat sat on the mat.

资料来源

learn-regex