perl的正则匹配里有几个有用的匹配方式
1.非捕获型匹配
[perl]#!/usr/bin/perluse warnings;
use strict;
my $line="123d4f5g7h8";
if($line=~/(?:5)(\w)/){print "match $1\n";
}[/perl]
这样就表示捕获5后面的一个字母或者数字,由于(?:5)是不占用空间的,所以我们还是用$1对捕获的字符串进行引用.
2.命名捕获
#!/usr/bin/perluse warnings;
use strict;
my $line="123d4f5g7h8";
if($line=~/(?:5)(?\w)/){print "match $+{var1}\n";
}
我们可以使用(?xxx)来把保存匹配的字符串存放在制定的变量里面.引用的时候需要使用$+{NAME}来进行引用.
3.顺序环视
(?=xxx)
*******|xxx********
(?=xxx)匹配xxx前面的位置。而(?!xxx)就是匹配除了xxx前面位置的其他所有地方。
4.逆序环视
```perl
(?<=xxx)
匹配 *xxx|,也就是xxx以后的那个位置,同理(?另外,在匹配时可以指定的几个常用选项是/i 忽略字母的大小写/x 忽略中间的空格 /\d{2} ([\W]) \d{2} \1 \d{2}/x等价于/\d{2}([\W])\d{2}\1\d{2}//s 将串视为单行,”.”可以匹配换行符 。 /a.*bc/s匹配字符串axxxxx \nxxxxbc,但/a.*bc/则不匹配该字符串。/m 多行匹配。 在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。/o 只编译一次,注意有内插变量的时候谨慎使用/g 匹配所有可能的模式
另外,在匹配时可以指定的几个常用选项是
/i 忽略字母的大小写
/x 忽略中间的空格 /\d{2} ([\W]) \d{2} \1 \d{2}/x等价于/\d{2}([\W])\d{2}\1\d{2}/
/s 将串视为单行,”.”可以匹配换行符 。 /a.*bc/s匹配字符串axxxxx \nxxxxbc,但/a.*bc/则不匹配该字符串。
/m 多行匹配。 在此情况下,^符号匹配字符串的起始或新的一行的起始;$符号匹配任意行的末尾。
/o 只编译一次,注意有内插变量的时候谨慎使用
/g 匹配所有可能的模式