Perl匹配字符串中的所有多个单词

时间:2011-03-04 13:23:05

标签: regex perl

我是来自以下系统的字符串:  “3月4日11:56:54 nxecopapp ftpd [20773]:[ID 44443 auth.error]无法打开模块:stat(/usr/lib/security/pam_unix_session.so.1)失败:没有这样的文件或目录”< / p>

我需要一个匹配 ftpd auth.error pam_unix_session.so.1 的perl正则表达式,即全部三个

4 个答案:

答案 0 :(得分:3)

由于订单似乎是固定的,你需要组成这样的匹配:首先匹配ftpd,然后是任意数量的字符,可能为零,然后是auth.error,然后是任意数量的字符,可能为零,然后是pam_unix_session.so.1

这直接转换为正则表达式。转换程序留给读者练习。 : - )

答案 1 :(得分:2)

试试这个:

m/ftpd|auth\.error|pam_unix_sessions\.so\.1/

修改

对不起,我匆匆读完,上面会匹配,相反,你需要这个来匹配它们:

m/(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*/

答案 2 :(得分:1)

(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*$

您可以在rubular

上在线验证

答案 3 :(得分:1)

use warnings;
use strict;

my $s = 'Mar 4 11:56:54 nxecopapp ftpd[20773]: [ID 44443 auth.error] unable to open module: stat (/usr/lib/security/pam_unix_session.so.1) failed: No such file or directory';

if ($s =~ /ftpd .* auth\.error .* pam_unix_session\.so\.1/x) {
    print "match\n";
}

请参阅:perlre