之前对正则表达是一直处于一知半解的状态,今天抽空系统学习下正则表达式
\b
匹配单词边界(开始或结束).
匹配除换行外的所有字符*
匹配所有字符\d
匹配数字 \s
匹配任意空白符(空格,制表符,换行符)\w
匹配字母、数字、下划线、汉字等^
匹配字符串的开始$
匹配字符串的结束\f
匹配换页符\n
匹配换行\r
匹配回车\t
匹配制表符*
表示重复任意次(可以是0)\d*
+
表示连续重复1次或更多次 \d+
?
表示重复零次或一次{n}
表示连续重复次数 \d{5}
匹配五个数字{n,}
表示重复n次或更多次{n,m}
表示重复n到m次[aeiou]
匹配[]中的任意一个字符[.?!]
匹配标点符号使用|
进行分支0\d{2}-\d{8}|0\d{3}-\d{8}
匹配两种格式的本地号码:010-52154852 0731-52154252\(0\d{2}\)[-]?\d{8}|0\d{2}[-]?\d{8}|\(0\d{3}\)[-]?\d{8}|0\d{3}[-]?\d{8}
匹配四种格式的本地号码:
010-52152415 01052154852 (010)52154125 (010)-52145214
0731-52145214 073152145214 (0731)52145214 (0731)-52145214
使用 ()
进行分组
匹配一个正确的IP地址(ip地址不能大于256)
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
常用分组语法
(?:exp)
匹配exp但不捕获,也不分配组号(?=exp)
匹配exp前面的位置(?!exp)
匹配后面跟的不是exp的字符之前的元字符大写就变成反义了
\W
匹配任意不是字母,数字,下划线,汉字的字符\S
匹配任意不是空白符的字符\D
匹配非数字\B
匹配非单词边界[^x]
匹配除了x以为的任意字符[^aeiou]
匹配除了aeiou的所有字符\S+
匹配不包含空白符的字符串`<a[^>]+>`匹配尖括号包围的a开头的字符串
\1
代表分组一匹配的文本\b(\w+)\s+\1\b
=> hello hello
?<name>
或者 ?'name'
\k<name>
\b(?<hi>\w+)\s+\k<hi>\b
=> hello hello
`\b(?'hi'\w+)\s+\k<hi>\b` => `hello hello`
?
例:
|
|