正则表达式

定义及用途

正则表达式是描述字符串集的字符串。主要用于以下几个方面:

a 验证字符串是否和正则表达式匹配

b 在字符串中查找满足正则表达式的子串

c 替换满足正则表达式的子串为其他

正则表达式基本语法

a 常量字符

    字母,数字,下划线以及没有特殊定义的符号都称之为常量字符。表达式中的常量字符,在匹配一个字符串中,匹配与之相同的一个字符串。

    例如:正则表达式bcd与目标字符串abcde,则匹配成功,匹配内容是:bcd

b 元字符

限定符 描述
. 匹配除换行符以外的任意字符
w 匹配字母,数字或者下划线的单词字符
W 匹配任何非单词字符
s 匹配任意空白符,包括空格,制表,换页符等
S 匹配任意非空白字符
d 匹配任意一个数字
D 匹配任意一个非数字

c 位置锚定元字符

锚定符 描述
^ 待匹配的字符位于行首
$ 待匹配字符位于行尾
 匹配单词的开始或结束,即单词边界位置
B 匹配单词的非边界位置

d 转义字符

如果你想要得到元字符本身的话需要使用“”来取消这些元字符的特殊意义

e 字符集

使用[]方括号包含一系列字符,能够匹配其中任意一个字符。另外,可以使用“-”表示范围内的所有字符。例如:[a-z12]表示匹配所有小写字母以及数字1,2中任何一个

使用[^]包含一系列字符,则匹配其中字符之外的任意一个字符

f 重复限定

语法 说明
? 重复0次或者1次
* 重复0次或者多次
+ 重复一次或者多次
{n} 重复n次
{n,} 重复至少n次
{n,m} 重复至少n次,但不多于m次

正则表达式高级规则

a 贪婪重复匹配模式

在使用修饰匹配次数的特殊符号时,有几种表示方法可以使同一个表达式能够匹配不同的次数。默认总是尽可能多的匹配,对于字符串“dxxxdxxxd”,举例如下:

(d)(w+) “w+”将匹配第一个“d”之后的所有字符“xxxdxxxd”
(d)(w+)(d) “w+”将匹配第一个“d”和最后一个“d”之间所有字符,虽然“w+”也能够匹配上最后一个“d”,但为了使整个表达式能够匹配成功,“w+”可以“让出”它本来能够匹配的最后一个“d”

b 非贪婪重复匹配模式

在修饰匹配次数的特殊符号后再加一个“?”号,则可以使匹配次数不定的表达式尽可能少的匹配,也称之为“勉强模式”。针对文本“dxxxdxxxd”

(d)(w+?) “w+?”将尽可能少的匹配“d”后面的字符,结果就是“w+?”只匹配了一个“x”
(d)(w+?)(d) 为了让整个表达式匹配,“w+?”不得不匹配“xxx”,才可以让后边的“d”匹配,从而使得整个表达式匹配成功,因此,结果是“w+?”匹配第一个“d”和第二个“d”之间的“xxx”

c 反向引用

表达式在匹配时,表达式引擎会将小括号“()”包含的表达式锁匹配到的字符串记录下来,在获取匹配结果时,小括号包含的表达式所匹配到的字符串可以单独获取。在实际场合中,当用某种边界来查找,而所获得的内容又不包含边界时,必须使用小括号来指定所要的范围。例如“<html>(.*?)</html>”表达式,可以在匹配后单独把(.*?)匹配的内容提取出来。

其实“小括号包含的表达式所匹配到的字符串”不仅可以在匹配结束后可以使用,在匹配过程中也可以使用。引用方法是”“加上一个数字。”1“引用第1个括号内匹配到的字符串。比如,正则表达式”<(w+)>.*?</1>“中的”1“表示该处匹配第一个”<>“中内容,该表达式可以用来校验<html>aa</html>等html标记是否配对,注意中间”.*?“是非贪婪模式

d 正向预搜索与反向预搜索

正向匹配 (?=xxx),正则表达式”windows (?=NT|XP)“在匹配”windows 98, windows NT, windows 2000“时,将只匹配”windows NT“中的”windows“,其他的”windows“匹配不上。

正向不匹配(?!xxx),正则表达式”do(?!w)”在匹配字符串”done,do,dog“,只匹配”do“。

反向预搜索:  匹配(?<=xxx)   不匹配(?<!xxx)

参考资料

正则表达式专题学习资料==推荐

原文地址:https://www.cnblogs.com/zhouLee/p/4735611.html