. 可以匹配任何字母字符和数字,包括标点符号和空白符等
\d 匹配数字 。与[0-9]等价
\D 非数字
\w 匹配英文字母字符、数字和下划线。与[A-Za-z0-9_]等价
\W 用于匹配\w不能匹配的字符,相反的字符
\s 匹配任何空白字符
\S 匹配任何非空白字符
\t 匹配制表符
\n 换行符
二、字符类
字符类是一些字符的无序集合,正则表达式模式可以从这个组合中挑选出一个字符类完成匹配。当字符类不带有关联的限定符时,字符类只会指定其中的一个字符用于匹配。
如:pe[aei]r可能会匹配pear、peer、peir,但不会匹配per。
1、字符类中元字符的含义
①^元字符
^元字符,也称为脱字符,当它是字符类中左方括号后面的第一个字符时,表示的是方括号中指定的任何字符都不能匹配的情况。
但当把^元字符用于字符类之外时,它就失去了在字符类内部作为第一个字符时所具有的的取反的含义。
如[^23]表示的是匹配除了2和3之外的字符;而[2^3]表示的是匹配2、^和3的字符。
②-元字符
-是用来表示范围的连字符,如[0-9]表示0到9的数字,[a-z]表示a到z之间的小写字母。
而[-09]则表示可以匹配
③取反
[A-Z&&[^B-D]]匹配处于A到Z之间并且不在B到D之间的字符,这种写法可以用在java中。
三、限定符
? 表示匹配0或1次
* 表示匹配0或多次(大于或等于0次)
+ 表示匹配至少一次
{}
{0,1} 等价于?
{0,}等价于*
{1,}等价于+
{n}匹配n次
{m,n}至少匹配m次,最多匹配n次
四、捕获组和非捕获组的圆括号
1、捕获组的圆括号
(Doctor|Dr.|Dr) (\s\w+\s) (\w+) 可以捕获三组
常见用法:
①反向引用匹配重复的单词
\<([A-Za-z]+) +\1\>
说明:\1表示的是匹配的第一个组的变量的值【ps:有些工具不是用\1,而是$1】
2、非捕获组的圆括号
(Doctor|Dr.|Dr) (?:\s\w+\s) (\w+) 只捕获两组
说明:当在圆括号后面放置一个问号和一个冒号时,相应的这对圆括号就不会再捕获内容了。
五、向前(向左)查找和向后(向右)查找 1、非捕获组 (?:.....)非捕获组 2、肯定式向前查找(?=....) 肯定式向前查找是指在要匹配的字符序列后面必须存在某些字符序列(通常与要匹配的字符序列不同)的条件约束下完成的匹配过程。 例如,要匹配字符序列States中的State,可以用State(?=s) 3、否定式向前查找(?!....) 否定式向前查找是指在要匹配的字符序列后面不存在某些字符序列的附加条件约束下完成的匹配过程。 例如,要匹配字符序列Star,但这个字符序列后面不能紧跟一个空格符,可以用Star(?! )或Star(?!\b) 4、肯定式向后查找(?<=...) 比方说,如果只想在前面有字符序列Dr.(一个大写的D,一个小写的r,一个据点和一个空格)的情况下才匹配姓氏Lin,那么就可以用下面的模式: (?<=Dr. )Lin 5、否定式向后查找(?<!) 例如,如果只想在前面没有字符序列Dr.(一个大写的D,一个小写的r,一个据点和一个空格)的情况下才匹配姓氏Lin,那么就可以用下面的模式: (?<!Dr. )Lin