以m//进行匹配:表达式可以写成m(fred) m<fred> m{fred}或m[fred]
可选修饰符:附加在正则表达式结尾的界定符右边,改变正则表达式的默认行为,如is
/i 大小写无关匹配
/s 匹配任意字符(如在默认情况下,点号.无法匹配换行符,加s后可以,可以达到[\d\D]的效果)
/x 在模式里随意加入空白,使其更易阅读,换行和#注释也被认为是空白
在一个模式中使用多个修饰符,先后顺序并不影响匹配结果
锚位:让模式直接匹配字符串的某处
(^) 标示字符串的开头 如/^fred/只匹配位于字符串最前端的fred
($) 标示字符串的结尾 如/fred$/只匹配字符串最后面的fred
\b
单词边界锚位如/\bfred\b/可匹配fred,但无法匹配frederick和alfred
绑定操作符:默认情况下模式匹配的对象是$_,=~能让Perl拿右边的模式来匹配左边的字符串
如 my $some_other="I dream of betty rubble.";
if ($some_other=~/\brub/){
print "Aye,there's the rub.\n"
}
模式串中的内插:正则表达式里可以进行双引号形式的内插,如下进行匹配时,模式是$what的值
my $what="larry";
while(<>){
if (/^($what)/){
print "We saw $what in beginning of $_";
}
}
捕获变量:我们在模式里使用圆括号时,用来表示不同的模式组,但圆括号同时也启动了正则表达式
处理引擎的捕获功能,即把(圆括号中模式所匹配的)部分字符串暂时记下来的能力。
模式里括号有多少对,匹配变量就有多少个,$1 $2...
$_="Hello there,neighbor";
if(/\s(\w+),/){
print "the word was $1 \n";
}
捕获变量的生命期:存活到下次成功的模式匹配为止
不捕获模式:(?:) 如下bronto可能有也可能没有,那么当没有时,允许不捕获
if(/(?:bronto)?saurus (steak|burger)/){
print "Fred wants a $1\n";
}
命名捕获:(?<LABEL>PATTERN),在捕获时使用特殊标签,如下例
my $names='Fred or Barney';
if($names=~m/(?<name1>\w+) (?:and|or) (?<name2>\w+)/){
say "I saw $+{name1} and $+{name2}";
}
反向引用则可使用\g{label} 的写法,如下
my $names='Fred Flinstone or Barney Flinstone';
if($names=~m/(?<last_name>\w+) and \w+ \g{last_name}/){
say "I saw $+{last_name}";
}
自动匹配变量:三个自带的捕获变量,不必圆括号就能引入
$& 保存字符串里实际匹配模式的部分
$` 保存匹配起始位置之前的字符串
$' 保存匹配结束位置之后的字符串
注意,如使用了自动匹配变量,正则表达式的运行速度会变慢
通用量词:在{}里指定重复次数的范围,如{5,15} {3, } {5}
优先级:从高到低依次为 圆括号、量词、锚位和序列、择一、元素
模式测试程序:一个有用的小程序,用来检测某些字符串是否被指定的模式匹配
while(<>){
chomp;
if(/YOUR_PATTERN/){
print "Matched: |$`<$&>$'|\n";
}else{
print "No match: |$_|\n";
}
}
可选修饰符:附加在正则表达式结尾的界定符右边,改变正则表达式的默认行为,如is
在一个模式中使用多个修饰符,先后顺序并不影响匹配结果
锚位:让模式直接匹配字符串的某处
绑定操作符:默认情况下模式匹配的对象是$_,=~能让Perl拿右边的模式来匹配左边的字符串
模式串中的内插:正则表达式里可以进行双引号形式的内插,如下进行匹配时,模式是$what的值
捕获变量:我们在模式里使用圆括号时,用来表示不同的模式组,但圆括号同时也启动了正则表达式
捕获变量的生命期:存活到下次成功的模式匹配为止
不捕获模式:(?:) 如下bronto可能有也可能没有,那么当没有时,允许不捕获
命名捕获:(?<LABEL>PATTERN),在捕获时使用特殊标签,如下例
反向引用则可使用\g{label} 的写法,如下
自动匹配变量:三个自带的捕获变量,不必圆括号就能引入
通用量词:在{}里指定重复次数的范围,如{5,15} {3, } {5}
优先级:从高到低依次为 圆括号、量词、锚位和序列、择一、元素
模式测试程序:一个有用的小程序,用来检测某些字符串是否被指定的模式匹配