. 点号,匹配任何单字符的通配符(除了换行符\n)--------"abcde"=~/abc.d/
* 匹配之前内容零次或者多次
*. 通配所有的字符串,捡破烂模式
+ 通配之前内容1次以上
? 通配前之前内容1次或者0次
分组:
--------------
/i 忽略大小写
/s 匹配任意字符
/x 加入空白
/-?\d+\.?\d*/ #挤在一起,看不清楚
/ -? \d+ \.? \d* /x #加入空白忽略之后,忽略空格
-------------------------
$& 完整展示正则式匹配的内容
$' 匹配之后的字符串
$` 匹配之前的字符串
如:if ("hello there,neighbor"=~/\s(w+),/) {print "$& ;}
输出为:
my $na='hello there, neighbor';
if ($na=~/\s(\w+),/)
{
say $';
say $`;
say $&;}
输出为:
neighbor
hello
there,
匹配次数:
my $na='aaaaaaaaaaaa, neighbor';
if ($na=~/(a{5,10})/) #匹配出现a 5到10次的地方,如果a出现了20次,则只有前10个会匹配,如果省去右边的值,则匹配次数没有上限;如果省去左边的值,变为匹配单独的次数(如只有左边值{5},只有前5个会匹配
{
print $1 ;} # 这里的$1指,第一次匹配的地方,按左括弧计算
优先级:
元括弧 (.....),(?:......),(?<LABEL>.....)
量词 a* a+ a? a{n,m}
锚位 abc a^ a$
择一 a|b|c
元素 a[abc] \d \1
优先级举例:
如:/^abc|bar$/ 匹配开头有abc的,或者匹配结尾有bar的,结尾如果有abc,不匹配
/^(abc|bar)$/ 匹配不管开头或者结尾有abc或者bar的,结尾有abc,也匹配
正则匹配测试模板:
while (<>) { chomp;
if (/.../) #这里输入需要测试的正则式;
{
say "$`<$&>$'";
}else{
say "no match";
}
}