以下代码尝试匹配
之类的格式 [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
被截断。为什么呢?
答案 0 :(得分:1)
在.
行尾符号前面的正则表达式符号$
捕获“一件事”,在您的情况下,似乎是最后一个字母S
这意味着你的正则表达式几乎是正确的,但正则表达式需要满足“一件事”,因此正则表达式匹配器将所需的(\w+)
模式重绕为一个字符以给出.
它的要求。
答案 1 :(得分:0)
你需要添加和转义方括号
my $regex=qr{^
(?:(\[[\w\/]+)=>\])? # (optional)
(\w+) # (required)
(?:\[->(\w+)\])? # (optional)
(?:\[\w+\]|\[\w+:\w+\])? # (optional)
}x;