今天我遇到了两种不同的Perl正则表达式匹配语法.
#I have a date string
my $time = '2012-10-29';
#Already familiar "m//":
$t =~ m/^(\d{4}-\d\d-\d\d)$/
#Completely new to me m##.
$t =~ m#^(\d{4}-\d\d-\d\d)#/
Run Code Online (Sandbox Code Playgroud)
现在/expression/和#expression#?之间有什么区别?
正如其他任何人所说,你可以在之后使用任何分隔符m.
/ 有一个特殊功能:你可以自己使用它,例如
$string =~ /regexp/;
Run Code Online (Sandbox Code Playgroud)
相当于:
$string =~ m/regexp/;
Run Code Online (Sandbox Code Playgroud)
Perl允许您使用几乎任何字符来分隔字符串,包括正则表达式.如果您需要匹配包含许多斜杠字符的模式,这将特别有用:
$slashy =~ m/\/\//; #Bad
$slashy =~ m|//|; #Good
Run Code Online (Sandbox Code Playgroud)
根据文件记载,第一个是"倾斜牙签综合征"的例子.
转义时,大多数但不是所有字符都以相同的方式运行.有一个重要的例外:m?...?是一种特殊情况,它只匹配一次调用之间的一次reset().
另一个例外:如果单引号用于分隔符,则不进行变量插值.$但是,你仍然需要逃避,因为它是一个匹配行尾的特殊字符.