正则表达式基础
元字符
代码 |
说明 |
. |
匹配除换行符以外的任意字符 |
.* |
匹配任意数量的不包含换行的字符 |
\w |
匹配字母或数字或下划线或汉字,相当于[a-z0-9A-Z_] |
\s |
匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等 |
\d |
匹配数字,相当于[0-9] |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
\ba\w*\b
先是某个单词开始处(\b),然后是字母a,然后是任意数量的字母或数字(\w*),最后是单词结束处(\b)
字符转义
使用\来取消这些字符的特殊意义。因此,可以使用\.和\*。
重复
代码 |
说明 |
* |
指定*前边的内容可以重复任意次以使整个表达式得到匹配 |
+ |
匹配1 个或更多连续的+前边的内容 |
? |
重复零次或一次 |
{n} |
匹配刚好n个{}前边的内容 |
{n,} |
匹配刚好n到更多个{}前边的内容 |
{n,m} |
匹配刚好n到m个{}前边的内容 |
字符类
反义
代码 |
说明 |
\W |
匹配任意不是字母或数字或下划线或汉字 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非数字的字符 |
\B |
匹配不是单词的开始或结束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou这几个字母以外的任意字符 |
替换
正则表达式里的替换指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}
匹配3 位区号的电话号码,其中区号可以用小括号括起来,也可以不用,区号与本地号间可以用连字号或空格间隔,也可以没有间隔
\d{5}-\d{4}|\d{5}
用于匹配美国的邮政编码,规则是5 位数字,或者用连字号间隔的9 位数字
\d{5}|\d{5}-\d{4}
只会匹配5 位的邮编(以及9 位邮编的前5位)
分组
正则表达式中并不提供关于数学的任何功能,所以只能使用冗长的分组。
IP 地址::((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
后向引用
使用小括号指定一个子表达式后,匹配这个子表达式的文本可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。
捕获 |
|
(exp) |
匹配exp,并捕获文本到自动命名的组里 |
(?<name>exp) |
匹配exp,并捕获文本到名称为name 的组里,也可以写成?'name'exp) |
(?:exp) |
匹配exp,不捕获匹配的文本 |
位置指定 |
|
(?=exp) |
匹配exp 前面的位置 |
(?<=exp) |
匹配exp 后面的位置 |
(?!exp) |
匹配后面跟的不是exp 的位置 |
(?<!exp) |
匹配前面不是exp 的位置 |
注释 |
|
(?#comment) |
这种类型的组不对正则表达式的处理产生任何影响,只是为了提供让人阅读注释 |