使用 '?' 时我遇到了奇怪的行为 正则表达式重复。我正在处理日志文件,在其中搜索特定的 HTTP 错误响应,例如。401. 该行可能包含但可能不包含响应正文。所以我想匹配这两种情况。我有以下代码。
#!/usr/bin/perl
$match = 'response 401';
$line = '2021-04-08 07:15:01 | INFO | [http-nio-8080-exec-11] | rId:123456789 | ip:127.0.0.1 | activationId: abcdefg | user: admin | response 401: headers: Cache-Control: [no-cache, no-store, max-age=0, must-revalidate] / Content-Length: [60] / Content-Type: [application/json;charset=UTF-8] / Date: [Thu, 08 Apr 2021 05:15:01 GMT] / Expires: [0] / Pragma: [no-cache] | body: {"errors":[{"message":"Bad credentials","repeatable":true}]}';
my($tstamp, $level, $thread, $body) = $line =~ m/^(.*?)\s+\|\s+(\w+)\s+\|\s+\[(.*?)\].*?$match.*?(?:body\:\s+({.*}))?/;
if($body) {
print "body: $body\n";
}
Run Code Online (Sandbox Code Playgroud)
这不会打印任何内容。我希望它应该与.*?$match.*?线条的最小部分相匹配并为 …