(.)是元字符,匹配任何的单字符。
/bet.y/ 这个模式匹配 bet,中间接任何一个字符(除换行符外),后面接Y字符。
/3\.14159/ (\.)这消除元字符含义,只匹配句点号本身。
量词:
* 匹配前面的内容零次或多次
/freb.*barney/ .*为捡破烂模式,通吃所有的字符串.
+ 匹配前一个条目一次以上
/fred +barney/ 中间有空格,匹配一次以上的空格。
? 匹配前一个条目一次或不匹配
模式分组
/(fred)+/ 会匹配fredfredfred,其中()是元字符
$_ ="abba";
if(/(.)\1/){ (这里的反向引用看不懂,mark一下,以后再钻)
print "it matched \n";
}
择一匹配
/fred|barney/betty/ '|'具有或的功效
字符集(指一串可能出现的字符集合,通过写在方括号([])内表示.它只匹配单个字符,但可以使字符集里列出的任何一个)
[abcwxyz]匹配这七个字符中的任何一个,可以使用连字符(-),就可以写成[a-cw-z]
[^def]匹配d,e,f之外的字符
\d <=> [0-9]
\w <=> [A-Za-z0-9_]
\s <=> [\f\t\n\r ]=>等于是包含5种空白的字符集:换页,制表,换行,回车以及空格(一般使用:\s*,\s+)
以m// 进行匹配 =>模式匹配定界符
例如:next if ( m|/.*mysqld, Version:.+ started with:| );(m||就是模式匹配定界符,里面匹配的都是正则表达式的写法)
.*(通吃所有字符,除换行符外)
.+(匹配一个以上)
\d+(一个以上的数字)
\s+(匹配一个以上的空白字符集)
/^fred/和、/rock$/,这里^和$都是锚位,一个代表以开头匹配,一个代表以结尾匹配
可修辞符:
/i 大小写无关 /s来匹配任意字符 /x加入空白
/-?\d+\.?\d*/x
拆分分析:
/
-? #匹配零个或一个减号
\d+ #匹配一个或多个数字
\.? #匹配零个或一二小数点
\d* #匹配零个或多个数字
/x
note:/^\#/,匹配去除以#号开头的语句。
=~绑定操作符, =~能让Perl拿右边的模式来匹配左边的字符串,而非匹配$_。
捕获变量(真是个强大的功能)
圆括号有启动正则表达式处理引擎的捕获功能。把(圆括号中模式所匹配的)部分字符串暂时记下来的能力,如果有一对圆括号,就会有一次以上的捕获。
例如:
原文记录:
# Query_time: 1.558936 Lock_time: 0.000077 Rows_sent: 0 Rows_examined: 262144
if ( /Query_time:\s+(.*)\s+Lock_time:\s+(.*)\s+Rows_examined:\s+(.*)/ ) {
$time = $1;
$rows = $3;
$new_sql = 1;
# print "found $1 $3\n";
next;
}
这里就可以捕获$1,$2,$3,它们分别的值是1.558936,0.000077,262144
S///是Perl中替换功能(未完待续)
阅读(6577) | 评论(0) | 转发(0) |