看http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html后作的一个记录。
一、正则表达式的符号:
(1)字符:
. 表示任意字符
转义字符
[] 表示从[]中取值
(2)预定义字符集:
d 数字[0-9]
D 非数字
s 空白字符 [<space>, fv]
S 非空白字符
w 字符 [A-Za-z0-9]
W 非字符
(3)数量词:
* 重复前面一个字符0-n次
+ 重复前面一个字符1-n次
? 重复前面一个字符0-1次
{m} 重复前面一个字符m次
{m, n} 重复前面一个字符m-n次,m,n可以省略一个,省略m表示0,省略n表示无限次
(4)边界匹配:
^ 匹配字符串的开头,在多行模式中也可匹配每一行的开头
$ 匹配字符串的结尾,在多行模式中也可匹配每一行的结尾
A 仅匹配字符串的开头
仅匹配字符串的结尾
匹配w与W之间,即匹配字符的开头(不能说是开头,但是却是匹配出的字符串的开头),非字符的结尾,组合而成的字符串。如
eg: a , 在“asfq!z”中匹配,则得到的结果是"asfq"
B 的取反
(5)逻辑与分组:
| 取示取其中的一个 如(123|456)
(...) 即可以将前面当成一个整体,相当于一个括号的作用, 与 “|” 合用, 分组(即可以将括号中的这一部分数据作为一个分组,输出)
(?P<Name>... ) 将“...”分组,并且命名为Name, eg: (?P<id>abc)xx,表示将匹配到的abc这一部分进行分组,并且命名为id
<Number> 表示将分组后,索引号为Number的字符 eg: 1 表示引用编号为1所匹配到的字符串
(6)不分组
(?:...), 表示不将“...”的内容分组,而是当是一个整体或者用作“|”的一部分
(?#...),表示"..."的内容将被忽略
(?=...),表示之后的内容为“...” , eg a(?=d), 表示a的后面必须是数字,如 a1
(?!...) , 表示之后的一个字符不是“...”
(?<=...),表示之前的一个字符是“...”
(?<!...),表示之前的字符不匹配“...”, eg (?<!d)a, 表示a前面不是数字才以匹配
(?(id/name) yes_pattern | no_pattern),如果编号为id或者name的组匹配到字符,则需要匹配yes_pattern,否则则匹配no_pattern
r 放在字符串前,表示不转义