Как я могу получить этот оттиск Regex? - PullRequest
0 голосов
/ 26 марта 2019

У меня проблема с моим регулярным выражением в php. Мне нужно это для некоторой оценки, и было бы намного проще, если бы я мог изменить это регулярное выражение вправо. Последний массив, который я конвертирую с json_encode в JSON-файл.

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

[
    [
    "234445 01:00:34.423 ineedhelpineedhelpineedhelppls",
    "234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid",
    ],
    [
    "234445 ",
    "234445 "
    ],
    [
    "01:00:34.423",
    "01:00:34.423"
    ],
    [
    "ineedhelpineedhelpineedhelppls",
    "sdfkkdkkddddddsdfsdfiieuwrepid"
    ]

]

Мое регулярное выражение выглядит так: preg_match_all('/(^\d+\s)(01:\w+\S\w+\S\w+)(\s.+)/im', $data, $matches)

Если бы что-то подобное было бы очень мило:

[
    [
    "234445 01:00:34.423 ineedhelpineedhelpineedhelppls",
    "234445",
    "01:00:34.423",
    "ineedhelpineedhelpineedhelppls"
    ],
    [
    "234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid",
    "234445 ",
    "01:00:34.423",
    "sdfkkdkkddddddsdfsdfiieuwrepid"
    ]

]

Файл .log выглядит примерно так:

234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
234443 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid

1 Ответ

0 голосов
/ 26 марта 2019

Вам просто нужно использовать флаг PREG_SET_ORDER для preg_match_all:

$data = '234445 01:00:34.423 ineedhelpineedhelpineedhelppls
234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid';
preg_match_all('/(^\d+\s)(\d+:\w+\S\w+\S\w+)(\s.+)/im', $data, $matches, PREG_SET_ORDER);
print_r($matches);

Выход:

Array (
  [0] => Array (
    [0] => 234445 01:00:34.423 ineedhelpineedhelpineedhelppls
    [1] => 234445
    [2] => 01:00:34.423
    [3] => ineedhelpineedhelpineedhelppls
  )
  [1] => Array (
    [0] => 234445 03:04:24.932 sdfkkdkkddddddsdfsdfiieuwrepid
    [1] => 234445
    [2] => 03:04:24.932
    [3] => sdfkkdkkddddddsdfsdfiieuwrepid
  )
)

Обратите внимание, что вам также нужно изменить 01 в своем регулярном выражении на \d+, чтобы соответствовать времени, начинающемуся, например, с. 03.

Демонстрация на 3v4l.org

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