файл регулярного выражения с php - PullRequest
0 голосов
/ 26 сентября 2011

Я пытаюсь создать регулярное выражение для этого вида журнала:

[23.09.11 11: 09: 53: 632 CEST] 0000005b FormLoginExte 3 Логин на основе формы: идентификатор пользователя / пароль, присутствующий в форме. Пользователь: user1

Я создал это:

preg_match ("/ ^ [\ d + / \ d + / \ d + \ \ d +: \ d +: \ d +: \ d + \ CEST] \ \ w {8} \ \ w +? \ + \ W +? \ +. +? $ ", $ line, $ match); // шаблон для форматирования строки

и получите эту ошибку:

[21.09.11 12: 11: 03: 126 CEST] 0000004d FormLoginExte 3 Логин на основе формы: идентификатор пользователя / пароль, присутствующий в форме. Пользователь: user1
Предупреждение: preg_match () [function.preg-match]: неизвестный модификатор '\' в C: \ AppServ \ www \ logWebsphere \ logWebspere.php в строке 79

Ответы [ 2 ]

2 голосов
/ 26 сентября 2011

Регулярные выражения (preg_match) работают медленнее, чем простые:

<?php
$data = explode(" ","[9/23/11 11:09:53:632 CEST] 0000005b FormLoginExte 3 Form based login: userid/password present in the form. User is: user1");

//data now contains all the info that you need
var_dump($data);
?>

POC здесь: http://codepad.org/nmo90QlI

1 голос
/ 26 сентября 2011

Вы используете в качестве разделителя прямые косые черты, но также включаете в свои регулярные выражения неэкранированные косые черты.Вы должны сначала избежать их, поставив перед ними две обратные косые черты.Требуется две обратные косые черты, потому что обратная косая черта сама является метасимволом и должна быть экранирована с помощью второй обратной косой черты.Фактически это создает одну обратную косую черту, которая может использоваться для экранирования.

Таким образом, ваше регулярное выражение становится:

preg_match("/^[\d+\\/\d+\\/\d+\ \d+:\d+:\d+:\d+\ CEST]\ \w{8}\ \w+?\ +\w+?\ +.+?$/", $line, $matches);

Обратите внимание, что вы также пропустили разделитель.

Кроме того, вы можете просто изменить разделители следующим образом:

preg_match("~^[\d+\/\d+\/\d+\ \d+:\d+:\d+:\d+\ CEST]\ \w{8}\ \w+?\ +\w+?\ +.+?$~", $line, $matches);

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

Я только что заметилчто вы пытаетесь сопоставить [ и ] как литералы.Это, однако, мета-символы (классы символов), и, как мне кажется, их также следует экранировать (\[ и \]).

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