匹配问题

时间:2017-08-18 14:52:50

标签: regex perl

以下代码尝试匹配

之类的格式

[a=>]b[->c][d:e]

其中a=>-> c,d:e是可选的。

($reg =~ /^
     (?:([\w\/]+)=>)?       # (optional)
     (\w+)                  # (required)
     (?:->(\w+))?           # (optional)
     (\[\d+\]|\[\d+:\d+\])? # (optional)
     .$/x)
        or croak ("-E Invalid register format );

当我将sample=>STATUS作为$reg value输入时,S的最后STATUS被截断。为什么呢?

2 个答案:

答案 0 :(得分:1)

.行尾符号前面的正则表达式符号$捕获“一件事”,在您的情况下,似乎是最后一个字母S

这意味着你的正则表达式几乎是正确的,但正则表达式需要满足“一件事”,因此正则表达式匹配器将所需的(\w+)模式重绕为一个字符以给出.它的要求。

答案 1 :(得分:0)

你需要添加和转义方括号

my $regex=qr{^
 (?:(\[[\w\/]+)=>\])?       # (optional)
 (\w+)                  # (required)
 (?:\[->(\w+)\])?           # (optional)
 (?:\[\w+\]|\[\w+:\w+\])? # (optional)
    }x;