Learn Perl 七~九章 正则表达式 要点整理
2011-09-02 14:07
253 查看
Note: 这份整理不能用来直接学习,必须先读过原书。
/abba/ 匹配含有"abba"
. 匹配除了\n意外所有字符
a* 匹配任意数量的a(包括0个)
a+ 匹配至少一个的a
a? 匹配一个或0个a
a{5,15} 匹配[5, 15]个a (低于5个不能匹配,超过15个能匹配,但是匹配15个)
a{5,} 匹配[5, 无穷]个a
a{5} 严格限制5个a
/abc|def|ghi/ 匹配含有abc或者def或者ghi
/(a+b)*/ 将a+b视为一个整体
/[a-z]/ 字符类,匹配a~z任意一个字母
/[^def]/ 匹配def三个字符之外的任意单个字符
\d =[0-9]
\w =[A-Za-z0-9_]
\s 匹配空白字符(5种:格式符、tab、换行符、回车符、空格符)= [\f\t\n\r ] (注意最后有空格)
之前都将模式放在一对正斜线里(//),这实际上是m//的简写。
m(fred), m<fred>, m{fred}, m[fred], m,fred,, m!fred!, m^fred^等都可以
修饰符:
/yes/i 不区分大小写
/a.b/s 使.能匹配任意字符
/a b/x 忽略模式中的空白(5种,同上)
/yes . no/isx 可以结合使用
锚定:
默认情况下,如果模式在字符串开头没能匹配上,它会顺着字符串下去,直到匹配上为止。如果使用了锚定(anchors)则可以要求模式在特定的位置进行匹配。
/^abc/ 匹配开头
/abc$/ 匹配结尾(忽略换行符)
/^\s*$/ 匹配空行 ?????????????????????????????????????????
词锚定
/\bfred\b/ 全字匹配fred
绑定操作符
if (/abba/) {} 默认对$_进行匹配,可以用 =~ 对指定字符串进行匹配。
$str=~/abba/ 与$str匹配是否含有abba
模式内的内插
/$str/ 匹配含有$str
匹配变量
括号()会引起正则表达式分配新的内存块
if(/(\S+) (\S+), (\S+)/) {
print "words were $1 $2 $3";
}
$1 $2 $3的顺序按照括号顺序,外括号优先
自动匹配变量
$& 上次匹配结果
$` 匹配成功前找到的字符串
$' 还未匹配的剩余部分
优先级(四级):
第一级: 括号()
第二级: 数量词
第三级: 锚定与序列
第四级: 或|
----------------------------------------------------------
使用正则表达式改变字符串
s///默认一次替换
最后加g
s/str1/str2/ str1被替换为str2
同样s///可以s###,若使用配对的字符,则s{}{},甚至s{}[]
/i,/x和/s也通用,且可写成/gixs,顺序无关
也可用=~改变默认的$_
大小写转换:
\U 要求之后全大写
\L 要求之后全小写
\E 终结\U or \L的影响
\u \l 影响下一个字符
顺序无关
\u\L or \L\u 首字母大写,其他小写。
split操作:
@field=split/separtor/,$str;
join操作
$str = join separtor, @field
m// 可在代码上下文中使用
my($first, $second, $third) =/(\S+) (\S+), (\S+)/;
my @words = ($text =~ /([a-z]+)/ig);
非贪婪数量词:
* + ? {} 是贪婪数量词,会进行最大限度的匹配,而非匹配到就返回
对于 yuanyin and lee is a couple. 使用/yuan.+lee/进行匹配:
首先找yuan,找到了之后找.+,会最大限度匹配,一直匹配到了行末couple.
然后找lee,发现已经结束了,而回退一个字符.+仍然匹
4000
配,因此回退一个字符找lee。
如果回退一个字符.+成立则回退一个字符,直到匹配到lee,或者回退字符导致.+不成立。
在数量词后加?,则成为非贪婪数量词,进行最小限度的匹配。
匹配多行文本:
/m
使用^与$锚定
非捕捉()--(?:string):出现括号只计数,不开内存。
/abba/ 匹配含有"abba"
. 匹配除了\n意外所有字符
a* 匹配任意数量的a(包括0个)
a+ 匹配至少一个的a
a? 匹配一个或0个a
a{5,15} 匹配[5, 15]个a (低于5个不能匹配,超过15个能匹配,但是匹配15个)
a{5,} 匹配[5, 无穷]个a
a{5} 严格限制5个a
/abc|def|ghi/ 匹配含有abc或者def或者ghi
/(a+b)*/ 将a+b视为一个整体
/[a-z]/ 字符类,匹配a~z任意一个字母
/[^def]/ 匹配def三个字符之外的任意单个字符
\d =[0-9]
\w =[A-Za-z0-9_]
\s 匹配空白字符(5种:格式符、tab、换行符、回车符、空格符)= [\f\t\n\r ] (注意最后有空格)
之前都将模式放在一对正斜线里(//),这实际上是m//的简写。
m(fred), m<fred>, m{fred}, m[fred], m,fred,, m!fred!, m^fred^等都可以
修饰符:
/yes/i 不区分大小写
/a.b/s 使.能匹配任意字符
/a b/x 忽略模式中的空白(5种,同上)
/yes . no/isx 可以结合使用
锚定:
默认情况下,如果模式在字符串开头没能匹配上,它会顺着字符串下去,直到匹配上为止。如果使用了锚定(anchors)则可以要求模式在特定的位置进行匹配。
/^abc/ 匹配开头
/abc$/ 匹配结尾(忽略换行符)
/^\s*$/ 匹配空行 ?????????????????????????????????????????
词锚定
/\bfred\b/ 全字匹配fred
绑定操作符
if (/abba/) {} 默认对$_进行匹配,可以用 =~ 对指定字符串进行匹配。
$str=~/abba/ 与$str匹配是否含有abba
模式内的内插
/$str/ 匹配含有$str
匹配变量
括号()会引起正则表达式分配新的内存块
if(/(\S+) (\S+), (\S+)/) {
print "words were $1 $2 $3";
}
$1 $2 $3的顺序按照括号顺序,外括号优先
自动匹配变量
$& 上次匹配结果
$` 匹配成功前找到的字符串
$' 还未匹配的剩余部分
优先级(四级):
第一级: 括号()
第二级: 数量词
第三级: 锚定与序列
第四级: 或|
----------------------------------------------------------
使用正则表达式改变字符串
s///默认一次替换
最后加g
s/str1/str2/ str1被替换为str2
同样s///可以s###,若使用配对的字符,则s{}{},甚至s{}[]
/i,/x和/s也通用,且可写成/gixs,顺序无关
也可用=~改变默认的$_
大小写转换:
\U 要求之后全大写
\L 要求之后全小写
\E 终结\U or \L的影响
\u \l 影响下一个字符
顺序无关
\u\L or \L\u 首字母大写,其他小写。
split操作:
@field=split/separtor/,$str;
join操作
$str = join separtor, @field
m// 可在代码上下文中使用
my($first, $second, $third) =/(\S+) (\S+), (\S+)/;
my @words = ($text =~ /([a-z]+)/ig);
非贪婪数量词:
* + ? {} 是贪婪数量词,会进行最大限度的匹配,而非匹配到就返回
对于 yuanyin and lee is a couple. 使用/yuan.+lee/进行匹配:
首先找yuan,找到了之后找.+,会最大限度匹配,一直匹配到了行末couple.
然后找lee,发现已经结束了,而回退一个字符.+仍然匹
4000
配,因此回退一个字符找lee。
如果回退一个字符.+成立则回退一个字符,直到匹配到lee,或者回退字符导致.+不成立。
在数量词后加?,则成为非贪婪数量词,进行最小限度的匹配。
匹配多行文本:
/m
使用^与$锚定
非捕捉()--(?:string):出现括号只计数,不开内存。
相关文章推荐
- C#正则表达式整理备忘 - 转
- 常用正则表达式整理[JavaScript]
- Web开发基础——正则表达式的注意事项整理
- Linux基础-正则表达式整理---------------grep、sed、awk
- c#判读字符串是否为数值型。。整理版。。 + C#常用正则表达式 。。。
- PHP 常用正则表达式整理
- C#正则表达式整理备忘[转]
- 正则表达式自己整理
- 超常用的PHP正则表达式收集整理
- 正则表达式整理
- 【重新整理】正则表达式,MD, VIM相关操作
- JAVA正则表达式的使用(待整理)
- C#正则表达式整理备忘
- C#正则表达式整理
- PHP中的正则表达式及模式匹配整理
- 正则表达式整理
- 最常用的PHP正则表达式收集整理
- 整理几个C#常用正则表达式
- ORACLE正则表达式函数详解--转载整理
- 正则表达式(整理)