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 匹配所有可能的模式