正则表达式
https://regex101.com/(正则测试用的地址)
概念
正则表达式是一种形式语言(规律而不是语义)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
通常用于:
校验:检查一个字符串是否包含指定模式的子字符串
替换:将匹配的子字符串替换为给定的新字段
匹配:提取符合匹配模式的字符串
组成
正则表达式=多个pattern组成(模式单元)
pattern=代词(谁)+量词(多少)+定位介词(在哪里)
代词
指代一个特定字符(也就是找谁) (限定一个字符的范围)
常用代词如下:(在正则表达式当^表达就是非的意思)
代词 | 作用 |
---|---|
\d | 0-9的数字 |
\D | 0-9的非数字 |
\w | 匹配[_0-9a-zA-Z]中包括下划线的单词字符(和[Z-Az-a9-0]是等价的) |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。 |
\s | 空格 |
\S | 非空格 |
\n | 匹配一个换行符 |
\f | 匹配一个换页符 |
\r | 匹配一个回车符 |
x/y | 匹配x或者y 例如:‘z/food’ 能匹配 “z” 或 “food”。’(z/f)ood’ 则匹配 “zood” 或 “food”。 |
. | 任意字符(除了\n以外) |
[xyz] | 字符集,用来匹配其中的任意一个单词。例如:[abc]可以匹配”apple“中的a |
[^xyz] | 负值字符集,用来匹配其中未包含的字符。例如:[abc]可以匹配"apple"中的p |
[x-y] | 字符范围。例如:[a-z]可以匹配a-z的所有小写字母 |
[^x-y] | 负值字符范围。跟上面反着来。 |
量词
通俗解释就是衡量有多少个代词
量词 | 意义 |
---|---|
* | 匹配前面的子表达式>=0次 例如:zo* 能匹配 “z” 以及 “zoo”。 * 等价于{0,} |
+ | 匹配前面的子表达式>=1次 例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,} |
? | 匹配前面的子表达式1次或者0次 例如:“do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。? 等价于 {0,1} |
{n} | 匹配n次 (n为非负数) 例如:‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o |
{n,} | 匹配至少n次 例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’ |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如 “o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格 |
“{m,n}”、“{m,}”、“?”、“*”和“+”之类的都算做是贪婪模式的量词
而在他们后面跟上一个"?" 就算做非贪婪模式的量词
贪婪模式和非贪婪模式的区别
定位词
通俗来讲就是这玩意儿在哪
定位词 | 意义 |
---|---|
^ | 匹配行首(字符串开始的位置) |
$ | 匹配行尾(字符串结束的位置) |
\b | 匹配单词边界 例如:er\b 就可以匹配beer后面的er 但是不能匹配very中的er |
\B | 匹配非单词边界 用法和上面相反 |
选择器
用来捕获匹配字符串(或者组合多种模式进行匹配)
(pattern):匹配pattern 并捕获这个字符串
(?:pattern):匹配pattern 但是不捕获这个结果
(?=pattern):正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
例如, ‘Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000” 中的 “Windows”