Still struggling with that regex to read logs

This is the regex I made so far

/^(?<date>(\[|)(\d{4}-\d{2}-\d{2}(T| )\d{2}:\d{2}:\d{2}(\]|.+\d{2}:\d{2}\]|.+\d{2}:\d{2})))(?<message>.*?)$/gm

If we take the following text as sample

[2022-10-31 10:16:22] main.ERROR: The "--only-trace" option does not exist.
#0 /var/www/magento/vendor/symfony/console/Input/ArgvInput.php(143): Symfony\Component\Console\Input\ArgvInput->addLongOption('only-trace', 'test')
#1 /var/www/magento/vendor/symfony/console/Input/ArgvInput.php(79): Symfony\Component\Console\Input\ArgvInput->parseLongOption('--only-trace=te...')
#2 /var/www/magento/vendor/symfony/console/Input/Input.php(55): Symfony\Component\Console\Input\ArgvInput->parse()
[2022-10-31 10:16:22] main.ERROR: I'm a new group

I'm expecting to retrieve the 2 dates with the full text. Sadly i'm only getting the first line

enter image description here

Do i have the wrong approach ? How can i fix it to make it work on multiline ?

Basically, the date is the one that should define a new line.

1 Answer 1

Try using : Worked for me
preg_match_all('/(?<date>\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}])(?<message>.+?)(\[\])/', $fileSubContent, $contents);

Here is the syntax : preg_match_all(pattern, input, matches, flags, offset)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.