正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
一、元字符
1、点号(.)
可以匹配除了换行符以外的任意字符。
2、反斜线(\)
在任何元字符前加上反斜线,就会使它失去元字符的特殊作用。所以,如果要匹配反斜线,就要用两个反斜线表示。
eg:/3\.14159/模式里的点号就不是通配符的元字符了。
eg:匹配反斜线 /\\/
二、简单的量词
1、星号(*)
用来匹配前面的条目零次或多次。
eg: .* 匹配任意字符零次到无限次。
2、加号(+)
匹配前一个条目一次以上。
3、问号(?)
匹配前一个条目是可有可无的,前一个条目可以出现一次或者不出现。
eg:/bamm-?bamm/ 只能匹配两种情况:bamm-bamm 或 bammbamm
4、{}
指定具体的重复次数。
/a{5,15} / 可匹配重复出现5到15次的字母 a。
/(fred){3,}/ 可匹配次数3次及以上fred。
/\w{8}/ 会匹配正好有8个单词字符的字符串。
三、模式分组
1、()的作用是对字符串分组。
eg:模式 /fred+/ 会匹配像 fredd、freddd 等这样的字符串。
模式 /(fred)+/ 会匹配像 fredfred、fredfredfred 等这样的字符串。
2、捕获组:用反向引用来引用圆括号中的模式所匹配的文字。
3、反向引用:在反斜线的后面接上数字编号,如:\1、\2 。相应的数字表示对应顺序的捕获组。
eg:可以用反向引用 \1 来再次匹配刚刚在圆括号中匹配的任意字符。
$_ = 'abba' ;
if( /(.)\1/ ){ #匹配'bb'
print " It matched same character next to itself!\n";
}
(.)\1 表示需要匹配连续出现的两个相同的字符。
eg:$_ = "yabba dabba doo";
if( /y(.)(.)\2\1/) { #匹配 'abba'
print " It matched after the y!\n ";
}
4、用\g{N}来表示反向引用写法,其中N是想要反向引用的组号。
四、择一匹配
1、竖线(|)
通常可以读成“或”,意思是要么匹配左边的内容,要么匹配右边的内容。
eg:/fred|barney|betty/ 可以匹配任何含有 fred 或 barney 或 betty 的字符串
/fred( |\t)+barney/ 匹配fred和barney之间出现一次以上空格、制表符或者两者混合的字符串。
2、字符集
指的是一组可能出现的字符,通过写在方括号([])内表示,它只匹配单个字符,但可以是字符集中列出的任何一个。
eg:[a-zA-Z] 可以匹配52个大小写字母中的任何一个。
3、脱字符 (^)
在字符集开头的地方加上脱字符^,来表示这些字符除外。
eg:[^def] 会匹配这三个字符以外的任何字符。
注:^字符放在不同的位置,有不同的作用。
^在[]内代表“反向选择”,出现在[]外面表示匹配字符串开头。
eg:^[the] 表示匹配的字符串开头是the。
五、字符集的简写
1、\d:表示任意一个数字的字符集的简写。
\D:即 [^\d],表示匹配非数字字符。
eg:^\d{5,12}$ 表示这一行只能出现5到12位的数字。
$ 表示匹配字符串的结束。
2、\s:表示匹配任意空白符
\S:即[^\s],表示非空白符。
3、\w:表示匹配 [a-z A-Z 0-9 _] 字母、数字、下划线。
\W:即 [^\w],表示匹配非单词字符。
4、\b:单词边界锚位,表示匹配任何单词的首位。
eg:/\b fred \b/ 表示只能匹配 fred
/\b hunt/ 表示匹配 hunt、hunting 或 hunter
5、\B:非单词边界锚位
eg:/\b search\B/ 会匹配serches、serching和serched。不匹配search、researching。
网友评论