|
|
|
| Есть вот такой текст:
20.07.2008 10:35<a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/"></a><a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">Немцы строят мечети!</a>Во время первого визита немецкого канцлера Ангелы Меркель в африканскую страну был подписан крупный контракт на строительство немецкими компаниями третьей по величине мечети в мире. 20.07.2008 10:26<a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obespechen/"></a><a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obespechen/">Рост количества гостиниц к ЕВРО-2012 обеспечен?</a>Для успешного проведения финала Чемпионата Евро-2012 столица Украины должна подготовить дополнительно 200 тыс. мест для приема гостей чемпионата. Именно поэтому строительство отелей сегодня приобрело особую популярность. 20.07.2008 10:14<a href="/hotnews/2008/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/"></a><a href="/hotnews/2008/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/">Южный берег Крыма может лишиться статуса курорта</a>Под видом отелей и санаториев в Крыму строят частное жильё. Это превращает курорт в перенаселённую и шумную агломерацию.
В тексте каждый блок материала начинается с даты (20.07.2008). Таких блоков много.
Как этот текст разбить на массив? При этом все должно остаться на своих местах. | |
|
|
|
|
|
|
|
для: Лена
(21.07.2008 в 10:10)
| | Что должен содержать элемент массива и каков должен быть его индекс/ключ? | |
|
|
|
|
|
|
|
для: cheops
(22.07.2008 в 02:48)
| | Элемент массива должен содержать текст, который начинается с даты и заканчивается аннонсом. Например, нулевым элементом должен быть такой текст:
20.07.2008 10:35<a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/"></a><a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">Немцы строят мечети!</a>Во время первого визита немецкого канцлера Ангелы Меркель в африканскую страну был подписан крупный контракт на строительство немецкими компаниями третьей по величине мечети в мире.
Первый элемент массива будет вот такой:
20.07.2008 10:26<a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obespechen/"></a><a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obespechen/">Рост количества гостиниц к ЕВРО-2012 обеспечен?</a>Для успешного проведения финала Чемпионата Евро-2012 столица Украины должна подготовить дополнительно 200 тыс. мест для приема гостей чемпионата. Именно поэтому строительство отелей сегодня приобрело особую популярность.
Второй элемент массива:
20.07.2008 10:14<a href="/hotnews/2008/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/"></a><a href="/hotnews/2008/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/">Южный берег Крыма может лишиться статуса курорта</a>Под видом отелей и санаториев в Крыму строят частное жильё. Это превращает курорт в перенаселённую и шумную агломерацию.
Ну и так дальше. Ключ массива - целое число.
Я пробовала разбить текст с помощью регулярных выражений, вот так:
$block = preg_split("#[\d]{2}\.[\d]{2}\.[\d]{4}\s+[\d]{2}:[\d]{2}#", $text, -1, PREG_SPLIT_NO_EMPTY);
|
Получилось. Только дата тогда вырезается. Как можно сделать так, чтобы дата сохранилась? И еще один вопрос: можно ли здесь обойтись без регулярных выражений? | |
|
|
|
|
|
|
|
для: Лена
(22.07.2008 в 10:10)
| | К сожалению удалось вытащить все элементы кроме последнего, нужно подумать, как извлечь последний элемент, может отдельным регулярным выражением
<?php
$text = '20.07.2008 10:35<a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">'.
'</a><a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">Немцы строят'.
' мечети!</a>Во время первого визита немецкого канцлера Ангелы Меркель '.
'в африканскую страну был подписан крупный контракт на строительство не'.
'мецкими компаниями третьей по величине мечети в мире. 20.07.2008 10:26'.
'<a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obe'.
'spechen/"></a><a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_'.
'k_evro2012_obespechen/">Рост количества гостиниц к ЕВРО-2012 обеспечен'.
'?</a>Для успешного проведения финала Чемпионата Евро-2012 столица Укра'.
'ины должна подготовить дополнительно 200 тыс. мест для приема гостей ч'.
'емпионата. Именно поэтому строительство отелей сегодня приобрело особу'.
'ю популярность. 20.07.2008 10:14<a href="/hotnews/2008/07/18/yujnyy_be'.
'reg_kryma_mojet_lishitsja_statusa_kurorta/"></a><a href="/hotnews/2008'.
'/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/">Южный бере'.
'г Крыма может лишиться статуса курорта</a>Под видом отелей и санаторие'.
'в в Крыму строят частное жильё. Это превращает курорт в перенаселённую'.
' и шумную агломерацию.';
$pattern = '#[\d]{1,2}\.[\d]{1,2}\.[\d]{4} [\d]{1,2}:[\d]{2}(.*?)(?=[\d]{1,2}\.[\d]{1,2}\.[\d]{4})#is';
preg_match_all($pattern, $text, $out);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(22.07.2008 в 10:10)
| | Или как-то работать вот с таким скриптом, первая цифра даты вырезается, но находится в соседнем элементе результирующего массива
<?php
$text = '20.07.2008 10:35<a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">'.
'</a><a href="/hotnews/2008/07/18/nemtsy_strojat_mecheti/">Немцы строят'.
' мечети!</a>Во время первого визита немецкого канцлера Ангелы Меркель '.
'в африканскую страну был подписан крупный контракт на строительство не'.
'мецкими компаниями третьей по величине мечети в мире. 20.07.2008 10:26'.
'<a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_k_evro2012_obe'.
'spechen/"></a><a href="/hotnews/2008/07/18/rost_kolichestva_gostinits_'.
'k_evro2012_obespechen/">Рост количества гостиниц к ЕВРО-2012 обеспечен'.
'?</a>Для успешного проведения финала Чемпионата Евро-2012 столица Укра'.
'ины должна подготовить дополнительно 200 тыс. мест для приема гостей ч'.
'емпионата. Именно поэтому строительство отелей сегодня приобрело особу'.
'ю популярность. 20.07.2008 10:14<a href="/hotnews/2008/07/18/yujnyy_be'.
'reg_kryma_mojet_lishitsja_statusa_kurorta/"></a><a href="/hotnews/2008'.
'/07/18/yujnyy_bereg_kryma_mojet_lishitsja_statusa_kurorta/">Южный бере'.
'г Крыма может лишиться статуса курорта</a>Под видом отелей и санаторие'.
'в в Крыму строят частное жильё. Это превращает курорт в перенаселённую'.
' и шумную агломерацию.';
$out = preg_split("#(?=[\d]{1,2}\.[\d]{1,2}\.[\d]{4}\s+[\d]{1,2}:[\d]{2})#", $text, -1, PREG_SPLIT_NO_EMPTY);
echo "<pre>";
print_r($out);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(22.07.2008 в 12:07)
| | Не понятно вот что:
1. Как же потом "приклеить" отрезанную цифру на место?
2. И вот это не могу себе объяснить: (.*?) - должен встречаться любой знак, сколько угодно раз - *
Зачем тогда здесь "?" | |
|
|
|
|
|
|
|
для: Лена
(22.07.2008 в 10:10)
| | Чуть подправил первый пример cheops'а:
<?php
preg_match_all('~\\d{1,2}.\\d{1,2}.\\d{4}\\s+\\d{1,2}:\\d{2}(?:<a.*?>.*?</a>){2}.*?(?=\\d{1,2}.\\d{1,2}.\\d{4} \\d{1,2}:\\d{2}|$)~', $text, $out);
|
Чуть подправил последний пример cheops'а:
<?php
$out = preg_split("#(?<!\\d)(?=[\d]{1,2}\.[\d]{1,2}\.[\d]{4}\s+[\d]{1,2}:[\d]{2})#", $text, -1, PREG_SPLIT_NO_EMPTY);
|
| |
|
|
|