Perl соответствует ВСЕМ нескольким словам в строке - PullRequest
1 голос
/ 04 марта 2011

У меня есть строка из системы, такой как: «4 марта, 11:56:54. Nxecopapp ftpd [20773]: [ID 44443 auth.error] не удалось открыть модуль: сбой stat (/usr/lib/security/pam_unix_session.so.1): такого файла или каталога нет»

Мне нужно регулярное выражение Perl, которое соответствует ftpd и auth.error и pam_unix_session.so.1 , то есть всем трем

Ответы [ 4 ]

3 голосов
/ 04 марта 2011

Поскольку порядок, по-видимому, фиксирован, вам нужно составить соответствие следующим образом: сначала сопоставьте ftpd, затем любое количество символов, возможно, ноль, затем auth.error, затем любое количество символов, возможно, ноль, затемpam_unix_session.so.1.

Это напрямую преобразуется в регулярное выражение.Процедура преобразования оставлена ​​читателю в качестве упражнения.: -)

2 голосов
/ 04 марта 2011

Попробуйте:

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

Редактировать:

Извините, я прочитал на скорую руку, выше будет соответствовать или , вместо этого вынужно это, чтобы соответствовать им всем:

m/(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*/
1 голос
/ 04 марта 2011
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

1 голос
/ 04 марта 2011
(?=.*ftpd)(?=.*auth\.error)(?=.*pam_unix_session\.so\.1).*$

Вы можете проверить это онлайн на rubular

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...