Perl正则表达式分隔符/.../和#...之间的区别

Sam*_*ron 7 regex syntax perl

今天我遇到了两种不同的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#?之间有什么区别?

Bar*_*mar 9

正如其他任何人所说,你可以在之后使用任何分隔符m.

/ 有一个特殊功能:你可以自己使用它,例如

$string =~ /regexp/;
Run Code Online (Sandbox Code Playgroud)

相当于:

$string =~ m/regexp/;
Run Code Online (Sandbox Code Playgroud)

  • **注意**如果你使用单引号,如`$ string = ~m'$ 5,000',则Perl不会尝试为你插入变量,与单引号字符串的方式相同 (3认同)

dan*_*111 8

Perl允许您使用几乎任何字符来分隔字符串,包括正则表达式.如果您需要匹配包含许多斜杠字符的模式,这将特别有用:

$slashy =~ m/\/\//;   #Bad
$slashy =~ m|//|;   #Good
Run Code Online (Sandbox Code Playgroud)

根据文件记载,第一个是"倾斜牙签综合征"的例子.

转义时,大多数但不是所有字符都以相同的方式运行.有一个重要的例外:m?...?是一种特殊情况,它只匹配一次调用之间的一次reset().

另一个例外:如果单引号用于分隔符,则不进行变量插值.$但是,你仍然需要逃避,因为它是一个匹配行尾的特殊字符.