注意: 正则表达式与文件通配语法无关, 比如 *.xml
正则表达式基础语法
大部分的字符(包括字母和数字字符)是普通字符。他们只能匹配它们自己。
cat 匹配 cat
有一些被称为“元字符”的特殊字符, 可以匹配特殊规则
点 “.”
匹配任意字符
c.t 匹配: 以c开头, 以t结尾, 中间是任意一个字符
使用反斜杠“\”可以忽略元字符,使得元字符的功能与普通字符一样。
c.t 匹配: c.t
c\t 匹配: c\t
在正则表达式的实现中, . 不能匹配换行符。
字符类: 字符类是一组方括号内的字符, 表示可以匹配其中的任何一个字符。
c[aeiou]t 表示匹配: cat or cet or cit or cot or cut
[0123456789] 表示匹配 任意一个数字
[a] 匹配单个字符 a
重要提示:字符类中和字符类外的规则有时不同,一些字符在字符类中是元字符,在字符类外是普通字符。一些字符正好相反。还有一些字符在字符类中和字符类外都是元字符,这要视情况而定!
比如: . 表示匹配任意一个字符, 而[.] 表示匹配一个全角句号。
字符类的范围
在字符集中,你可以通过使用短横线来表示匹配字母或数字的范围。
[b-f] 与 [bcdef]相同
[A-Z] 与[ABCDEFGHIJKLMN….XYZ] 相同
[1-9] 与 [123456789] 相同
字符类的反义
[^a] 匹配 任何不是“a”的字符
[^a-zA-Z0-9] 匹配 任何不是字母也不是数字的字符
[^\^] 匹配任何不是 “^”的字符
转义字符类
\d 与 [0-9]相同(要匹配\d 用 \d)
\w 与 [0-9A-Za-z_]相同
\s 匹配一个空字符(空格, 制表符, 回车或者换行)
\D 与 [^0-9]相同, 表示匹配一个非数字字符。
\W 与 [^0-9A-Za-z]相同, 表示匹配一个非数字同时不是字母的字符。
\S 表示匹配一个非空字符。
重复
在字符或字符集之后, 可以使用{}大括号来表示重复。
a{1} 与 a 相同
a{3} 匹配 aaa
a{0} 匹配 空字符串
a{2} 匹配 a{2}
指定重复次数范围
colou{0,1}r 匹配 color 或者 colour
a{3,5} 匹配 aaa 或者aaaa 或者 aaaaa
注意: 优先匹配最长字符串, 比如输入 I had an aaaaawful day会匹配单词aaaaawful中的aaaaa,而不会匹配其中的aaa。
重复次数也可以是开区间:
a{1, } 表示匹配一个或一个以上的连续字符a
关于重复的转义字符
? 与 {0, 1} 相同
* 与 {0, } 比如: .* 表示匹配任意内容
+ 与{1,} 相同, 比如 \w+ 表示匹配一个词
\?*+ 表示匹配字符串 “?*+”
[?*+] 表示匹配一个问号, 或者一个星号, 或者一个加号
非贪婪匹配
通过在句尾加上一个问号, 可以使得字符串重复不再匹配最长字符。
\d{4,5}? 表示匹配\d\d\d\d或者\d\d\d\d\d。也就是和\d{4}一样
“.*?” 表示先匹配一个双引号,然后匹配最少的字符,然后是一个双引号,与上面两个例子不同,这很有用。
选择匹配
使用 | 分隔可以匹配不同的选择:
cat|dog 表示匹配 “cat” 或者 “dog”
red|blue| 或者 red||blue 或者 |red|blue 表示匹配red或者blue或者一个空字符
a|b|c 与[abc]相同
分组
可以使用括号表示分组:
简化正则表达式:
\w+\W+\w+\W+\w+ 以及 \w+\W+\w+\W+\w+\W+\w+\W+\w+\W+\w+
答案:
\w+(\W+\w+){2}, \w+(\W+\w+){5}
单词分隔符
单词和非单词之间有单词分隔符。
\b 表示匹配一个单词分隔符
换行符
^表示匹配行的开始位置
$表示匹配行的结束位置
^&表示一个空行