Regex 匹配问题
下面的代码试图匹配以下格式Regex 匹配问题,regex,perl,Regex,Perl,下面的代码试图匹配以下格式 [a=>]b[->c][d:e] 其中a=>,->c,d:e是可选的 ($reg =~ /^ (?:([\w\/]+)=>)? # (optional) (\w+) # (required) (?:->(\w+))? # (optional) (\[\d+\]|\[\d+:\d+\])? # (optional) .$/x)
[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
时,STATUS
的最后一个S
被截断。为什么?就在您的$
行结束符号之前的正则表达式符号
捕获了“一件事”,在您的情况下,它似乎是最后一个字母S
这意味着您的正则表达式几乎是正确的,但正则表达式需要满足“一件事”,因此正则表达式匹配器将所需的
(\w+)
模式倒转一个字符,以赋予
其所需的字符。您需要添加并转义方括号
my $regex=qr{^
(?:(\[[\w\/]+)=>\])? # (optional)
(\w+) # (required)
(?:\[->(\w+)\])? # (optional)
(?:\[\w+\]|\[\w+:\w+\])? # (optional)
}x;
为什么您的正则表达式中有一个
?谢谢!你说得对,老师。导致问题的原因。从样本数据来看,括号实际上并不存在,它们只是表示可选零件。非常感谢!