С preg_split
вы можете использовать
'~\R+(?=\[\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}])~'
См. Демо regex
Подробности
\R+
- 1+ символов разрыва строки (?=\[\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}])
- положительный прогноз, который, непосредственно справа от текущего местоположения, требует \[
- [
char \d{2}-\d{2}-\d{4}
- шаблон, похожий на дату, 2 цифры, дефис, 2 цифры, дефис и 2 цифры
- пробел \d{2}:\d{2}:\d{2}]
- шаблон времени, 2 цифры, :
, 2 цифры, :
, 2 цифры.
PHP демо:
$text = "[30-05-2013 15:45:54] A A
[26-06-2013 14:44:44] B A
[26-06-2013 14:44:44] C A
[26-06-2013 14:43:16] Some lines are so large, they take multiple lines, so explode('\n') won't work because
I need the complete message
[26-06-2013 14:44:44] E A
[26-06-2013 14:44:44] F A
[26-06-2013 14:44:44] G A";
print_r(preg_split('~\R+(?=\[\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2}])~', $text));
Вывод:
Array
(
[0] => [30-05-2013 15:45:54] A A
[1] => [26-06-2013 14:44:44] B A
[2] => [26-06-2013 14:44:44] C A
[3] => [26-06-2013 14:43:16] Some lines are so large, they take multiple lines, so explode('
') won't work because
I need the complete message
[4] => [26-06-2013 14:44:44] E A
[5] => [26-06-2013 14:44:44] F A
[6] => [26-06-2013 14:44:44] G A
)
На всякий случай, если вам нужно получить больше деталей, чем просто разделение, вы можете использовать соответствующий подход с
'~^\[(\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2})]\s*+(.*?)(?=\s*^\[(?1)]|\z)~ms'
См. regex demo , используйте его как
preg_match_all('~^\[(\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2})]\s*+(.*?)(?=\s*^\[(?1)]|\z)~ms', $text, $matches)
Это будет соответствовать
^
- начало строки \[(\d{2}-\d{2}-\d{4} \d{2}:\d{2}:\d{2})]
- детали даты и времени (включенные в Группу 1) \s*+
- 0+ пробелов (собственно) (.*?)
- любые 0+ символов как до первого появления (?=\s*^\[(?1)]|\z)
- возможное совпадение с местоположением, за которым сразу следует \s*
- 0+ пробелов ^
- начало строки \[(?1)]
- [
, шаблон группы 1, ]
|
-или \z
- самый конец строки.