如果我有一些错误文字:
"09 30 14:00:21 server01 /opt/www/folder1/cgi-bin/job1.pl[14357]: ALERT: Fatal error connecting to database: DBI connect('database=x1_dataHere;host=server02.gss.bbb.com;port=3308','X1_APP_INFO',...) failed: Access denied for user 'X1_APP_INFO '@' server02.gss.bbb.com' (using password: YES) at /opt/includes/Connector.pm line 13 #01011 main::croak called at /opt/www/folder1/cgi-bin/job1.pl line 15",
我想仅保留 "ALERT: "
之后的内容。
如何使用Perl正则表达式做到这一点? [?!]
答案 0 :(得分:2)
答案 1 :(得分:0)
在对\K
过于兴奋之前,你应该知道它
代表'K'eep之前匹配的所有东西\ K。
所以它是后面的构造,而不是保持领先构造。
所有这一切都是排除匹配之前的所有内容
变量$&
,其主要用途是替换之后的所有
它(而不是之前),有效地替换s/before\Kafter//g
删除after
。
\K
的另一个用途可以是断言后面的可变宽度
示例/before\s+\Kafter/
其中$&
将包含after
。
这是无聊的,因为在Perl中,没有人使用匹配变量$&
(因为延迟而直接捕获组0)。
如果您想继续ALERT:
,请使用替换
s/^.*?ALERT: //