1.概述
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
2.正则表达式基础
正则表达式
由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。
1.[...]字符组
字符组可以匹配[ ]中包含的任意一个字符。虽然可以是任意一个,但只能是一个。
字符组支持由连字符“-”来表示一个范围。当“-”前后构成范围时,要求前面字符的码位小于后面字符的码位。
[^…]排除型字符组。排除型字符组表示任意一个未列出的字符,同样只能是一个。排除型字符组同样支持由连字符“-”来表示一个范围。
表达式 |
说明 |
[abc] |
表示“a”或“b”或“c” |
[^abc] |
表示除了“a”或“b”或“c”外任意字符 |
[0-9] |
表示0~9中任意一个数字,等价于[0123456789] |
[u4e00-u9fa5] |
表示任意一个汉字 |
[^a1<] |
表示除“a”、“1”、“<”外的其它任意一个字符 |
[^a-z] |
表示除小写字母外的任意一个字符 |
[a-zA-Z] |
表示从a到z或从A到Z的字符 |
[a-z&&[hij]] |
表示h,i或j(交) |
实例:
“[0-9]”在匹配“Windows 7”时,匹配成功,匹配的结果为“7”。
“[^inW]”在匹配“Windows 7”时,匹配成功,匹配的结果为“d”。
“[a-z]”在匹配“123az”时,匹配成功,匹配的结果为“a”。
2.常见字符范围缩写
表达式 |
说明 |
d |
任意一个数字,相当于[0-9],即0~9中的任意一个 |
w |
任意一个字母或数字或下划线,相当于[a-zA-Z0-9_] |
s |
任意空白字符,相当于[回车r换行n换页fTabt] |
D |
任意一个非数字字符,d取反,相当于[^0-9] |
W |
w取反,相当于[^a-zA-Z0-9_] |
S |
任意非空白字符,s取反,相当于[^rnftv] |
实例:
“wsd”在匹配“Windows 7”时,匹配成功,匹配的结果为“s 7”。
3.小数点
表达式 |
说明 |
. |
匹配除了换行符n以外的任意一个字符 |
4.其它元字符
说明 |
^ |
匹配字符串开始的位置(包括nr后的位置),不匹配任何字符 |
$ |
匹配字符串结束的位置(包括nr前的位置),不匹配任何字符 |
b |
匹配单词边界,不匹配任何字符 |
B |
匹配非单词的边界 |
G |
前一个匹配的结束 |
实例:
“^a”在匹配“cba”时,匹配失败,因为表达式要求开始位置后面是字符“a”,而“cba”显然是不满足的。
“d$”在匹配“123”时,匹配成功,匹配结果为“3”,这个表达式要求匹配结尾处的数字,如果结尾处不是数字,如“123abc”,则是匹配失败的。
“erb”在匹配“never”,匹配成功,匹配结果为“er”。匹配“verb”匹配失败,er后不是词的边界。
5.转义字符
说明 |
r,n |
回车和换行 |
|
匹配“”本身 |
^,$,. |
分别匹配“^”、“$”和“.” |
6.量词
说明 |
举例 |
{m} |
表达式匹配m次 |
“d{3}”相当于“ddd” “(abc){2}”相当于“abcabc” |
{m,n} |
表达式匹配最少m次,最多n次 |
“d{2,3}”可以匹配“12”或“321”等2到3位的数字 |
{m,} |
表达式至少匹配m次 |
“[a-z]{8,}”表示至少8位以上的字母 |
? |
表达式匹配0次或1次,相当于{0,1} |
“ab?”可以匹配“a”或“ab” |
* |
表达式匹配0次或任意多次,相当于{0,} |
“<[^>]*>”中“[^>]*”表示0个或任意多个不是“>”的字符 |
+ |
表达式匹配1次或意多次,至少1次,相当于{1,} |
“ds+d”表示两个数字中间,至少有一个以上的空白字符 |
7.逻辑操作符
说明 |
| |
多个子表达式之间取“或”的关系 |
XY |
Y跟在X后面 |
(X) |
捕获组 |
“^aa|b$”在匹配“cccb”时,是可以匹配成功的,匹配的结果是“b”,因为这个表达式表示匹配“^aa”或“b$”,而“b$”在匹配“cccb”时是可以匹配成功的。
“^(aa|b)$”在区配“cccb”时,是匹配失败的,因为这个表达式表示在“开始”和“结束”位置之间只能是“aa”或“b”,而“cccb”显然是不满足的。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|