当正则表达式由冒号分隔时,它意味着什么?

时间:2016-09-19 15:00:04

标签: regex perl

我在一些生产代码中找到的Perl正则表达式中冒号有什么功能?

if ($r->uri =~ m:/copy/(\d+):) {
    my $ref = $1;

代码正在解析URI,第二行使用捕获的组。

2 个答案:

答案 0 :(得分:10)

perl中的m运算符用于针对正则表达式测试字符串。你通常会这样使用它:

"string" =~ m/regex/

如果需要,可以更改上面示例中的引号(/)。因此,上述示例可以等效地编写为以下任何一个:

"string" =~ m(regex)
"string" =~ m[regex]
"string" =~ m{regex}
"string" =~ m|regex|
"string" =~ m:regex:

请注意,如果您使用/,则可以省略m,如

"string" =~ /regex/

答案 1 :(得分:6)

m之后,任何字符都可以作为分隔符,因此冒号正在替换标准/并让它们成为普通字符。

来自perlrequick

  

匹配的//默认分隔符可以通过放置' m'来更改为任意分隔符。在前面