\b-元字符,代表单词的开头或结尾,也就是单词的分界处。 \bHi\b
下列未进行说明的都是元字符。
. 匹配除了换行符以外的任意字符。
* 指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。(不包含换行的字符) \bHi\b.*\bLucy\b
\d 匹配一位数字(0或1或2......或9) 0\d\d-\d\d\d\d\d\d\d\d
- 不是元字符 ,只匹配它本身。
避免重复 0\d{2}-\d{8} {2}({8})指前面\d必须连续重复匹配2次(8次)。
\s 匹配任意的空白符,制表符(Tab),换行符,中文全角空格。
\w 匹配字母或数字或下划线或汉字
\+ 和*类似,匹配重复1次或更多次 而*是重复任意次数(可以为0次)
^ 和$都匹配一个位置 和\b类似
^匹配你要用来查找的字符串的开始,$匹配结尾。 ^\d{5,12}$ 匹配5到12位的数字
{5,12} 表示重复次数不少于5次,不能多于12次
例子: \ba\w*\b 以字母a开头的单词,先是某个单词开始处(\b),然后是字母a
,然后是任意数量的字母、数字(\w*),最后是单词结束处(\b)
\d+ 匹配一个或更多连续数字
\b\w{6}\b 匹配刚好6个字符的单词
字符的转义:
如果是想查找元字符本身的话,如查找 . 或者 * 时,就得使用\来取消字符的特殊意义。
\. --. \* -- * \\
--\ 查找本身
例子: deerchao\.net 匹配deerchao.net C:\\Windows 匹配
C:\Windows
重复:
* 重复0次或者更多次
+ 重复1次或者更多次
? 重复0次 或者1次
{n} 重复n次
{n,} 重复n次或更多
{n,m} 重复n到m 次
例子:Windows\d+ 匹配Windows后面跟着1个或更多数字
^\w+ 匹配的一行的第一个单词或整个字符串的第一个单词
字符类
[aeiou] 匹配方括号中的任意一个字符
[.?!]匹配的是.或?或者!
[0-9] 代表含义与\d 完全一致 一位数字
[a-z0-9A-Z] 也等同于\w
\(?0\d{2[) -]?\d{8} 首先是一个转义字符/( 出现0次或1次(?) ,然后是1个0
后面有2个数字,然后是)空格-中的其中一个,它出现1出或不出现,最后是8个数字
分支条件
|或
0\d{2}-\d{8}|0\d{3}-\d{7}
匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号码或者是4位区号,7个本地号码。如:010-12345678
和0376-2233445
\(?0\d{2}\)?[- ]?\d{8}|0\d{2}[- ]?\d{8}
\d{5}-\d{4}|\d{5} 与
\d{5}|\d{5}-\d{4} 是完全不同的
匹配分支条件会从左往右的测试每个条件,如果满足某个分支的话,就不会去再管其他条件了。
分组:
用小括号来指定子表达式,也叫分组
(\d{1,3}\.){3}\d{1,3}
这是一个简单的IP地址匹配表达式,\d{1,3}匹配1到3位数字,(\d{1,3}\.){3}匹配三位数字加上一个英文句号重复三次,最后再加上
一个一到三位的数字(\d{1,3})
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
反义:
有时需要查找不属于某个能简单定义的字符类的字符,比如像查找除了数字以外,其他任意字符都行的情况,这时需要用到反义。
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除X以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
例子:
\S+ 匹配不包含 空白字符的字符串
<a[^>]+> 匹配用尖括号括起来的以a开头的字符串
后向引用:用于重复搜索前面某个分组匹配的文本。
\b(\w+)\b\s+\1\b 可以用来匹配重复的单词,像 go go 或者kitty kitty
。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符
(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)
指定子表达式的组名,要指定一个子表达式的组名,要使用这样的语法:(?<Word>\w+)(或者把尖括号换成‘ 也行):
(?‘word‘\w+)),这样就把\w+的组名指定为word了,要反向引用这个分组捕获的内容,你可以使用\k<word>,所以上一个例子也可以写成:\b(?<word>\w+)\b\s+\k<word>\b