Для какого-то темного и загадочного вопроса мой рег-экс не тянет то, что я ожидаю;PERL REGEX: Несколько исключений/шаблонов в одной строке
Пример:
примеры текста для очистки:
[PROTOCOL (Id:"hashguy82", ProcessID: 45)]
[APP (Id:"hashguy83", ProcessID: 67)]
Мне нужно только, чтобы получить имя пользователя
мой код:
\[(PROTOCOL|APP)\s\(Id:\"(\w+)\"\, \s ProcessID\: \s \d+\)] \s
(PROTOCOL|APP)
Я имела в виду определение разные возможный патте RNS
\s
Я имел в виду пространства
Выход: нет ошибок просто пустой выход, как я думаю, в основном формат является правильным, но я не могу понять, что мне не хватает.
Пример Строка:
2015-01-27 00:00:09,654 TRACE [APP (Id:"HashMap81", ProcessId: 62)] PerformanceLogger (PerformanceLogger.Python:29) - Client:344,UserId:13383,Ip:127.0.0.1,DurationMillis:272,DurationText:0.272 seconds,Path:MyClass.myMethod
Полный код:
my $file = 'path_my_file.txt';
open my $fh, "<", $file or die "Could not open $file: $!";
while (<$fh>) {
my @fields = m{^
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:[\d,]+)
\s (WARNING|TRACE) \s\s
qr/ \[ (?: APP| PROTOCOL) \s* \(Id:"(\w+)", \s* ProcessID: \s* \d+ \) \] /x \s
\s PerformanceLogger \s \(PerformanceLogger\.Python\:\d+\) \s - \s
Client:(\d+),
UserId:(\d+),
Ip:([\d.]+),
DurationMillis:\d+,
DurationText:([\d.]+) \s seconds,
Path:/(\S+)
$}x
or next;
printf('$date=%s; $level=%s; $user=%s; $client_id=%s; $user_id=%s; $ip=%s; $elapsedTime=%s; $classMethod=%s', @fields);
print "\n";
Ваше регулярное выражение ищет строку 'User:', но нет такой строки i Ваши данные. – Borodin
Приносим извинения за опечатку. Исправлено сейчас: Мне нужно принимать значения hasguy82 и hashguy83; давайте предположим, что мое описание у меня есть файл с двумя строками, которые мне нужно хранить, используя мое регулярное выражение, просто userid..eliminating все остальное; я чувствую, что «в PERL смущен чем-то другим ... Как вы думаете? – HashGuy81
Потерять пробелы:' \ [(PROTOCOL | APP) \ s \ (Id: \ "(\ w +) \" \, \ sProcessID \: \ s \ d + \)] \ s' – pajaja