转载请说明出处!!!
作者:上官轩言
限定符!
(?)--匹配该元字符的前一个字符0次或1次
#use a used variable name is illegal used?--d可有可无,可以使用该表达式去匹配use和used这个两单词
(*)--匹配该元字符的前一个字符任意次数(包括0次)
#ac abc abbbbbc adc adddddc abc--*规定了a和c中间b可以没有,也可以出现多次。
(+)--匹配出现[1]次以上的字符 #ac abc abbbbbc adc adddddc ab+c--+规定了a和c中间b不可以没有,必须出现一次以上。
注:如果想要指定b出现的次数,可以使用{},在大括号里规定b出现的次数,{}可以允许输入一个范围,如2~6则输入{2,6},如果想输入2次以上则{2,}
#如果想表示多个字符的重复则将所想要的字符用()括起来 再在后面添加限定符号 “或”运算!
(|)--将匹配条件进行逻辑或运算 #a cat a dog a bird a(cat|dog)--|用来分割匹配的内容,前面会先去匹配a,括号内则匹配cat或者dog
字符类!
[]--字符集,范围内的所有字符都能被匹配
#abc tiger aabbcc dog [abc]+--匹配由abc三个字符组成的单词(含有abc三个字符的单词)
#可以指定字符的范围
- [a-z]代表所有的小写英文字符
- [a-zA-Z]代表所有的小写英文字符
- [0-9]代表所有的英文字符和数字
- [^0~9]代表所有的非数字字符(包括换行符)
元字符!
元字符(大多数都以反斜杠开头)
\d--数字字符
\w--"单词"字符(英文、数字及下划线)
\s--空白符(包含Tab和换行符)
\D--非数字字符
\W--非单词字符
\S--非空白字符
\b--代表单词字符的边界
.(看清楚了,这是一个点!!!!)--代表任意字符(但不包括换行符)
^--匹配首行$--匹配行尾
#^a只会去匹配行首的a,a$只会去匹配行尾的a
#高级概念
#贪婪与懒惰匹配 <.+>--匹配所有(在+后面加上?)
#<b>This is a sample text<b>(?会将默认的贪婪匹配[Gready Match]切换为懒惰匹配[Lazy Match])
实例
实例1-- 匹配RGB颜色值
#00
#ffffff
#ffaaff
#00hh00
#aabbcc
#000000
#ffffffff
匹配--#[a-fA-F0-9]{6}\b(\b避免#ffffffff被识别成RGB颜色值)
实例2--IPv4地址匹配
123
255.255.255.0
192.168.0.1
0.0.0.0
256.1.1.1
This is a string
123.123.0
匹配--\d+.\d+.\d+.\d+(\b+会匹配任何长度大于1的数字,.代表.这个字面量,因为.是特殊字符,需要用反斜杠作转义)
改良--\b(25[0-5]|2[0-4]\d|[01]?\d\d?(IPv4地址匹配每一部分也可以由两位数字构成).){3}(重复匹配三次)(25[0-5]|2[0-4]\d|[01]?\d\d?)\b(匹配字符边界)
总结!!!
限定符(Quantifier)
- a* --a出现0次或多次
- a+ --a出现1次或多次
- a? --a出现0次或1次
- a{6} --a出现6次
- a{2,6} --a出现2-6次
- a{2,} --a出现2次以上
或运算符(OR Operator)
- (a|b)--匹配a或者b
- (ab)|(cd)--匹配ab或者bc
字符类(Character Classes)
- [abc]--匹配a或者b或者c
- [a-c]--同上
- [a-zA-Z0-9]--匹配小写+大写英文字符以及数字
- 0-9--匹配非数字字符
元字符(Meta-characters)
- \d--匹配数字字符
- \D--匹配非数字字符
- \w--匹配"单词"字符(英文、数字及下划线)
- \W--匹配非单词字符
- \s--匹配空白符(包含Tab和换行符)
- \S--匹配非空白字符
- \bword\b--\b标注字符的边界(全字匹配)
- ^匹配首行$匹配行尾
贪婪/懒惰匹配(Greedy/Lazy Match)
- <.+>默认贪婪匹配"任意字符"
- <.+?>懒惰匹配"任意字符"