Я создаю скрипт, который находит все файлы error_log на моем сервере. Вот пример типичного файла error_log:preg_match_all с несколькими строками
[08-Feb-2012 05:45:56] PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php:308
Stack trace:
#0 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(238): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('')
#1 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(96): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array)
#2 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(60): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array)
[08-Feb-2012 05:46:18] PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php:308
Stack trace:
#0 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(238): Swift_Mime_Headers_MailboxHeader->_assertValidAddress('')
#1 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(96): Swift_Mime_Headers_MailboxHeader->normalizeMailboxes(Array)
#2 /lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php(60): Swift_Mime_Headers_MailboxHeader->setNameAddresses(Array)
[15-Feb-2012 15:39:10] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in /settings.php on line 47
Я использовал следующий код, чтобы извлечь каждую ошибку в отдельности, так что я могу показать их для удобного просмотра
preg_match_all('/\[\d{2}-\w{3}-\d{4} \d{2}:\d{2}:\d{2}\].*/', $error_log_file, $error_log_parts);
Он работал, но проблема была в его не выбрал несколько строк.
Array
(
[0] => Array
(
[0] => [08-Feb-2012 05:45:56] PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /home/elvanto/public_html/lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php:308
[1] => [08-Feb-2012 05:46:18] PHP Fatal error: Uncaught exception 'Swift_RfcComplianceException' with message 'Address in mailbox given [] does not comply with RFC 2822, 3.6.2.' in /home/elvanto/public_html/lib/SwiftMailer/classes/Swift/Mime/Headers/MailboxHeader.php:308
[2] => [15-Feb-2012 15:39:10] PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting ']' in /home/elvanto/public_html/roster-settings.php on line 47
)
)
Так я добавил 'S' до конца:
preg_match_all('/\[\d{2}-\w{3}-\d{4} \d{2}:\d{2}:\d{2}\].*/s', $error_log_file, $error_log_parts);
Но теперь, кажется, чтобы выбрать все. Мне нужен способ выбрать все, пока не придет новая дата. Например: [08-фев-2012 05:46:18]
Какой код мне нужно добавить для этого?
Спасибо за это! По какой-то странной причине ваш код не работал сначала ... После игры я наконец получил это, чтобы работать: /\ [\ d {2} - \ w {3} - \ d {4} \ d { 2}: \ d {2}: \ d {2} \]. *? (? = \ [\ D {2} - \ w {3} - \ d {4} \ d {2}: \ d { 2}: \ d {2} \])/s –
Да, не был уверен, будет ли '^' в lookahead работать. Вашему регулярному выражению, которое вы должны работать, должно быть экранировано '[' и ']'. т. е. '(? = \ [\ d {2} ...... \])'. –
Как сделать (? = \ [\ D {2} - \ w {3} - \ d {4} \ d {2}: \ d {2}: \ d {2} \]) часть опциональной ? Например, самый последний код ошибки не подбирается, потому что после него нет разрыва строки. Я пробовал несколько вещей, но не могу заставить его работать ... –