Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配问题_Regex_Perl - Fatal编程技术网

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;

为什么您的正则表达式中有一个
?谢谢!你说得对,老师。导致问题的原因。从样本数据来看,括号实际上并不存在,它们只是表示可选零件。非常感谢!