一个正则表达式是一种从左到右匹配主体字符串的模式。 我们常使用缩写的术语“regex”或“regexp”。
正则表达式可以从一个基础字符串中根据一定的匹配模式替换文本中的字符串、验证表单、提取字符串等等。
最简单的一个例子就是设定一个用户命名的规则,让用户名包含字符、数字、下划线和连字符,以及限制字符的个数。
针对个别元字符做解释。
"[^c]ar"
The car ++par++ked in the ++gar++age.
"\s*cat\s*"
The fat ++cat++ sat on the con++cat++enation.
?=… 正先行断言,表示第一部分表达式之后必须跟着 ?=…定义的表达式。
返回结果只包含满足匹配条件的第一部分表达式。 定义一个正先行断言要使用 ()。在括号内部使用一个问号和等号: (?=…)。
(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++.
正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式。
/(.*at)/
++The fat cat sat on the mat++.
/(.*?at)/
++The fat++ cat sat on the mat.