perl正则表达式从匹配到行尾

时间:2014-11-04 18:52:56

标签: regex pcre

如果我有一些错误文字:

"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正则表达式做到这一点? [?!]

2 个答案:

答案 0 :(得分:2)

您可以在perl regex中使用它:

ALERT: \K(.*)$

OR

(?<=ALERT: )(.*)$

RegEx Demo

答案 1 :(得分:0)

在对\K过于兴奋之前,你应该知道它 代表'K'eep之前匹配的所有东西\ K。
所以它是后面的构造,而不是保持领先构造。

所有这一切都是排除匹配之前的所有内容 变量$&,其主要用途是替换之后的所有 它(而不是之前),有效地替换s/before\Kafter//g 删除after

\K的另一个用途可以是断言后面的可变宽度 示例/before\s+\Kafter/其中$&将包含after

这是无聊的,因为在Perl中,没有人使用匹配变量$&
(因为延迟而直接捕获组0)。

如果您想继续ALERT:,请使用替换 s/^.*?ALERT: //