0
我正在創建一個腳本,用於查找服務器上的所有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-Feb-2012 05:46:18]
需要添加什麼代碼才能做到這一點?
謝謝!出於某種奇怪的原因,你的代碼最初並不起作用......玩完之後,我終於明白了這一點: /\ [\ d {2} - \ w {3} - \ d {4} \ d { 2}:\ d {2}:\ d {2} \]。*?(?= \ [\ d {2} - \ w {3} - \ d {4} \ d {2} 2}:\ d {2} \])/ s – 2012-03-13 00:26:21
是的,不確定前視中的^是否會起作用。你必須工作的正則表達式應該已經逃脫了''和''''。即'(?= \ [\ d {2} ...... \])'。 – 2012-03-13 00:34:19
如何製作(?= \ [\ d {2} - \ w {3} - \ d {4} \ d {2}:\ d {2}:\ d {2} \])部分可選?例如,最後一個錯誤代碼沒有被拾取,因爲它之後沒有換行符。我嘗試了一些東西,但無法讓它工作... – 2012-03-13 01:59:08