perl语言正则表达式简介
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
perl语言正则表达式简介
正则表达式(Regular Expression)是指定模式的一种方法,这种模式对文本进行筛选,只匹配特定的字符串。一旦匹配到了一个字符串,就可以从大量的文本中将其抽取出来,或者利用另一个字符串来替代这个字符串。其使用的格式为/pattern/,使用的匹配操作符为:=~(匹配),!~(不匹配)。Perl语言中因为有这个功能,所以对于字符串的处理能力是非常强有力的。
一:常用正则表达式简介:
1.匹配模式和匹配操作符:
正如上面所说,匹配模式为/patter/,匹配操作符:=~(匹配),!~(不匹配)。
例如: if($line =~/^round-trip/)
{……}
2. 模式中的特殊字符:+,* ,?, [],[^], {m}等字符的含义如下:
/pattern/含义:
x?找寻0个或是1个x字符
x*找寻0个或是0个以上的x字符
x+找寻0个或是1个以上的x字符
{m}找寻刚好是m个个数指定的字符
{m,n}找寻在m个数个数以上,n个个数以下指定的字符
[]找寻符合[]内的字符
[^]找寻不符合[]内的字符
[0-9]找寻符合0到9的任何一个字符
[a-z]找寻符合a到z的任何一个字符
[^0-9]找寻不符合0到9的任何一个字符
[^a-z]找寻不符合a到z的任何一个字符
^x找寻字符x开头的字符
$x找寻字符x结尾的字符
a|b|c找到符合a字符或是b字符或是c字符的字符串
abc找到一个含有abc的字符串
\d找寻一个digit(数字)的字符,和[0-9]语法一样
\D找寻一个non-digit(非数字)的字符,和[^0-9]〕语法一样
\w 找寻一个英文字母或是数字的字符,和[a-zA-Z0-9]语法一样
\W找寻一个非英文字母,数字的字符,和[^a-zA-Z0-9]语法一样
\s找寻一个空白的字符
\S 找寻一个非空白的字符
特别的是字符".",它可以匹配除换行外的所有字符,通常与*合用。“.*”表示除换行外得任意个任意字符
下面是一些正则表达式在实际中用到或常用的范例:
范例:说明:
/pe*rl/找到p后面跟着0个或多个e,再跟着rl的字符串,如同/cg{0,1}i/
/pe+rl/找到p后面跟着一个以上e,再跟着rl的字符串,如同/cg{1,}i/
/pe?rl/找到p后面跟着0个或是一个e,再跟着rl的字符串,如同/cg{0,1}i/
/p.rl/找到p后面跟着一个任意字符,再跟着rl的字符串
/p.*rl/找到p后面跟着任意个任意字符,再跟着rl的字符串
/p|r|l/找到含有p或r或l的字符串
/pe{2,4}rl/找到p后面跟着2个到4个e,再跟着rl的字符串
/[perl]/ 找到符合有这四个字符任意一个的字符串
/[^perl]/找到没有这四个字符中任意一个的字符串
/round-trip/找到含有round-trip的字符串
/^round-trip/找到开头是round-trip的字符串
/round-trip$/找到结尾是round-trip的字符串
/^\*/ 找到以*开头的字符串
/ up| down/ 找到以空格up或空格down开头的字符串
/CPU utilization for five seconds.*/ 找到含有" CPU utilization for five seconds加除
换行符外的任意字符"的字符串
/round-trip min\/avg\/max/找到含有“round-trip min/avg/max”的字符串
/^---.*---/ 找到符合含有在以“---”开头,且在“---"间"---"有除换行符
外任何字符的字符串
/\d% packet loss/找寻符合含有"数字% packet loss"的字符串
/^ +\d+/ 找到以一个或多个空格开头并且后接一个或多个数字的字符串/^pamvr.*/ 找到以pamvr开头且后接除换行符外任意字符的字符串
/up.*up/ 找到含有两个up且在它们间有除换行符外任意字符的字符串/^-rw-rw-r--/ 找到以'-rw-rw-r--'开头的字符串
/\d$/ 找到以数字结尾的字符串
/up$/i 找到以up结尾,并且忽略up大小写的字符串
/\d/找寻符合数字的字符串,可以使用/\d+/来表示一个或是多个数值的字符串
/\D/找寻符合不是数字的字符串
/\w/找寻符合英文字母,数字的字符串
/\W/找寻符合非英文字母,数字字符的字符
if ($line =~ /\d+(\\.\\d+)?$/) 匹配非负浮点数
例1:检验变量名的类型:
if ($varname =~ /^\$[A-Za-z][_0-9a-zA-Z]*$/) { #以字符'$'开头的变量 print ("$varname is a legal scalar variable\n");#则为简单变量 } elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) { #以字符'@'开头的变量 print ("$varname is a legal array variable\n");#则为数组类型变量 } elsif ($varname =~ /^%[A-Za-z][_0-9a-zA-Z]*$/) { #以字符'%'开头的变量