正则表达式的支持由PCRE库软件包提供。下列特殊字符只适用于“匹配正则表达式”和“搜索替换字符串”函数。“匹配模式”函数使用另一套数量较少的正则表达式,但执行速度比“匹配正则表达式”函数快。
正则符号分为字符类、限定符、分组等几种。
可以匹配字符类:.(句点)、\w匹配字母、\W匹配非字母、\d匹配数字、\D匹配非数字、\r回车、\n换行、\f置页符、\t制表符、\s非空白字符等。
\w:等同于[a-zA-Z0-9_]
\b:指空格、标点、换行符这些字符所在位置,并不匹配字符
.:匹配除新行符\n(换行符)之外的任何单个字符。如置于方括号内,.表示文本句点。
限定符:*0次以上匹配、+1次以上匹配、?01次匹配(在其他限定符前表示非贪婪)、{n,N}n到N次匹配等。
分组和锚:[]匹配集合中任意字符(^-\)、()子匹配(先外层)、|分割匹配(只会返回第一个匹配成功的)、^匹配字符第一个表示从串开始匹配([]中表示不包含)、$匹配字符最末表示从串结束匹配、\匹配特殊限定字符,如$(与转义区别)
捕获:
(exp) 匹配exp,并捕获文本到自动命名的组里
(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号;()默认情况下会将其中exp匹配的内容捕获到组里
零宽断言:
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?<!exp) 匹配前面不是exp的位置
(?!exp) 匹配后面跟的不是exp的位置
注释:
(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
要特别注意的是,零宽断言是不占用位置的,也就是说,匹配结果里是不会返回它的。
后向引用:
使用后向引用,可在同一正则表达式中指代已出现的子匹配。例子:(["*$])(\w+)\1\2\1
可以匹配"foo"foo"、*bar*bar*。
“匹配正则表达式”函数
输入字符串、正则表达式不支持空字符,即\s,包含空格、换行、制表符、回车等等。经测试,输入字符串正常读入
.句点不可以匹配换行符
“搜索替换字符串”函数
1、“搜索替换字符串”函数不支持字符串中包含空字符。但是实际测试,似乎没问题
2、替换字符串输入端适用下列特殊字符:$n、${n}表示第n个子匹配字符。n大于9只能用后一种表示方法
“匹配模式”函数
仅支持如下匹配字符:.、+、*、^、$、\、[]、?;不支持零宽断言、不支持\b等类似情况、不支持括号()和竖直线(|)等;
可以包含空格;
搜索+可以使用[+];
使用字符常量传入字符串,可以识别空白字符\s;
匹配模式中.句点可以匹配换行符
以上函数只能返回字符串中第一个匹配到的字符,当有多个可匹配的字符,第一个之后的字符无法匹配。可以采用循环不断匹配剩下的字符串。