普通字符
字母,数字,汉字,下划线,以及没有特殊定义的标点符号。
表达式中普通字符,在匹配一个字符串的时候,匹配与之间相同的一个字符
转义字符
转义字符 \
换行符 \n
制表符 \t
代表反斜杠本身 \\
匹配这些字符本身 \^
\$
\.
\(
\)
\{
\}
\?
\+
\*
\|
\[
\]
标注字符集合
注意:\d
\w
\s
大写,与之相反。
\d
任意一个数字。0~9
任意一个。\w
任意一个字母,或数字,或下划线,也就是A~Z,a~z,0~9,_
中任意一个\s
包括空格,制表符,换行符等空白字符的其中任意一个.
小数点可以匹配任意一个字符(除了换行符)。如果要匹配包括\n
在内的所有字符,一般用[\s\S]
自定义字符集合
[]
中括号匹配方法,能够匹配中括号中任意一个字符
[ab5@]
匹配a
,或b
,或5
或@
[^abc]
匹配a
,b
,c
之外的任意一个字符[f-k]
匹配f~k
之间的任意一个字母[^A-F0-3]
匹配A~F
,0-3
之外的任意一个字符
正则表达式的特殊符号,如果在中括号中,将失去特殊意义。^
尖括号 -
减号除外
标注字符集合,除小数点外。如果在中括号中,将匹配该集合。
[\d.\-+]
将匹配:数字,小数点,减号,加号【这里的\-
表示把减号转义了。】
量词
{n}
匹配重复n次{m,n}
最少重复m次,最多重复n次{m,}
至少匹配m次?
匹配0次或1次,相当于{0,1}
+
最少匹配1次,相当于{1,}
*
不出现或出现任意次,相当于{0,}
注意:没有{,6}
这种写法。如果想匹配最多6次,可以使用{n,6}
贪婪模式
默认模式。匹配字符越多越好。\d{3,6}
如果一个字符串为95423156545 1234
,匹配一个9
符合\d
,继续往后匹配,匹配5
也符合\d
,一直匹配到能匹配的最大值,最终匹配6次\d
为止,也就是954231
。到这里还没结束,因为后面还有数字,还符合匹配条件,同理会匹配56545
。同理再匹配1234
。所以它会匹配到三个字符串954231
56545
1234
非贪婪模式
在量词后面加上一个?
问号。表示匹配字符越少越好。\d{3,6}?
如果一个字符串为95423156545 1234
,匹配一个9
符合\d
,继续往后匹配,匹配5
也符合\d
,当匹配到954
就不匹配了,这里954
就是匹配到的第一个字符串。同理继续往后匹配,所以它会匹配到四个字符串954
231
565
123
字符边界
下面三个字符是用来判断位置,而不是用来匹配字符的。
^
字符串开始的位位置^aaa
匹配aaa开头的字符串
$
字符串结束的位置abc$
匹配abc结尾的字符串
\b
匹配一个单词边界。匹配这样一个位置:前面字符和后面字符不全是\w
。也就是\b
前后都是\w
就不匹配。abcd\b
例如一个字符串是abcd12 abcd123 abcd aa
此时的\b
前面是d
,因为\b
前后都是\w
就不匹配,也就是说如果此时\b
后面是\w
就不匹配。
第一个字符串abcd12
这里的\b
后面是1
,此时两边都是\w
不符合。同理abcd123
也不符合。第三个abcd
是符合的。因为\b
后面是空白符号,不属于\w
。所以匹配的最终结果高亮显示:abcd12 abcd123 abcd aa
匹配模式
1 | + IGNORECASE 忽略大小写模式 |
选择符和捕获组组
1 | `|`分支结构 |
引用捕获组
反向引用\n
这里的n表示数字。
上面说了,每一对小括号都会分配一个编号,从左往右数左括号,依次编号是1,2,3 …
通过反向引用,可以对括号中的内容进行引用。\1
表示第一个左括号的内容。
例如:
(abc)\1
只有一个左括号,这里的\1
就表示第一个左括号的内容(abc)
,所以它表示(abc)(abc)
也就是匹配字符串abcabc
(ab(def)c)\1\2
从左往右数左括号,一共有两个,这显而易见。第一个左括号的内容是(ab(def)c)
,所以\1
就表示(ab(def)c)
。第二个左括号的内容是(def)
,所以\2
表示(def)
。所以,这个正则表示(ab(def)c)(ab(def)c)(def)
,也就是匹配字符串abdefcabdefcdef
前后断言
(?=exp)
后面能匹配的表达式。(?!exp)
后面不能匹配的表达式。(?<=exp)
前面能匹配的表达式。(?<!exp)
前面不能匹配的表达式。
例如:[a-z]+(?=\d+)
能匹配ab a3b abb6 ab34cae24 898pzaj97
,表示匹配字母后面是数字的字符串,匹配结果高亮ab a3b abb6 ab34cae24 898pzaj97
常用正则
其他使用
Java正则
匹配
1 | /* |
查找
1 | /* |
替换
1 | Matcher m3=Pattern.compile("[0-9]").matcher("abc123def4g56"); |
String
1 | String str="a123b456c789"; |