Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разбить HTML-текст на заголовки и содержимое
 
 автор: alexan   (18.01.2011 в 04:58)   письмо автору
 
 

Здравствуйте друзья.
Столкнулся намедни с серьезной задачкой, несколько часов над ней бился, но все как рыба об лед! Честно говоря работаю с регулярками не так часто как хотелось бы, видимо поэтому такой тормоз. Прошу сильно не пинать, а по возможности помочь. В общем нужно чтобы скрипт разбивал исходный текст следующим образом:
1. от названия ‘<a NAME="’ и до ‘</font></font>’ перед следующим ‘<a NAME="’ и конечно чтоб ложил каждый вырезанный кусок в свою ячейку для дальнейших действий над ним.
2. Последний кусок должен быть вырезан до ‘</body></html>’

Вот код:

<?php
$text = '<center><img SRC="0medic.jpg" height=80 width=600>
<hr SIZE=1 WIDTH="500">
<br><img SRC="2.jpg" height=287 width=172>
<hr SIZE=1 WIDTH="500"></center>
<a NAME="Бактерии"></a><b><font face="Times New Roman"><font size=+1>Бактерии</font></font></b>
<p><font face="Times New Roman"><font size=+0>«Уничтожим все бактерии,
и все будет в порядке!» Так думают многие. Однако далеко не все бактерии
вредны, а потому использование мыла против бактерий ежедневно вряд ли можно
назвать оправданным, подобных средств нарушается естественный
«микробный фон», вследствие чего кожа становится уязвимой.
Дерматологи отмечают, что подобные процессы происходят и при ежедневном
протирании лица средствами от угревой сыпи (кроме того, они еще и уплотняют
кожу).</font></font>
<p><a NAME="Бальзам Караваева"></a><b><font face="Times New Roman"><font size=+1>Бальзам
Караваева</font></font></b>
<p><font face="Times New Roman"><font size=+0>Если верить рекламе, то бальзамы
Караваева лечат чуть ли не от всех болезней. Но так ли это? Увы, реклама
вводит потребителей в заблуждение.
, пришедшего в редакцию
газеты «Известия» от ветерана Вооруженных сил Владимира Бредихина: «В течение
нескольких лет широко рекламируются бальзамы Караваева — «Аурон», «Соматон»
и «Ви-таон». Нас уговаривают купить смеси из этих лекарственных растений,
утверждая, что ими можно вылечить все болезни человека.
Тем более что я и моя супруга имели некоторые заболевания, которые обещали вылечить
бальзамы Караваева. Мы оба страдали от невралгии, радикулита и болей в
суставах и позвоночнике, связанных с отложением солей...</font></font>
<p><font face="Times New Roman"><font size=+0>Мы попробовали на себе все
три бальзама. Если вы спросите, какие были результаты лечения, я отвечу
— ноль. При этом
отметили, что бальзамы Караваева лекарством не являются и относятся к косметическим
средствам...»</font></font>
<p><font face="Times New Roman"><font size=+0>Эксперт газеты «Известия»
кандидат медицинских наук А. Мельников уточняет, что из всех трех бальзамов
лекарством является только «Витаон», но и его рекламные обещания гораздо
щедрее возможностей. «Витаон» представляется
даже как «незаменимое средство для повышения лактации» и, кроме того, «нормализует
микрофлору кишечника младенца». При этом в «Регистре» (Регистре лекарственных
средств. — <i>С.М.) </i>даже нет указания на то, что «Витаон» можно принимать
внутрь, тем более младенцам. И это не случайно: в его состав входит весьма агрессивный
чистотел. Ожидать, что он будет полезным для кишечника младенца, не стоит.</font></font>
<p><font face="Times New Roman"><font size=+0>«Аурон» и «Соматон» к лекарствам
не относятся, но их рекламные посулы еще беззастенчивее».</font></font>
<p><font face="Times New Roman"><font size=+0>Вполне возможно, что бальзамы
Кара-ваевадействительно могут оказаться полезными при некоторых, но отнюдь
не всех, заболеваниях. Но реклама, вводящая потребителей в заблуждение,
может дискредитировать любое, даже неплохое, средство.</font></font>
<p><a NAME="Банки"></a><b><font face="Times New Roman"><font size=+1>Банки</font></font></b>
<p><font face="Times New Roman"><font size=+0>До сих пор многие думают,
что банки, широко применявшиеся до недавних пор в лечебной практике, —
эффективное средство при различных простудных заболеваниях. Даже медики
были убеждены в том, что положительное
влияние на быстрое рассасывание очагов воспаления.
Более того, считалось, что даже кровоподтеки на месте банок полезны. Это
как бы лечение собственной кровью, по-научному — аутогемотерапия, повышающая
защитные силы организма.</font></font>
<p><font face="Times New Roman"><font size=+0>Но оказалось, что все далеко
не так. Исследования но и на плевре, а это уже плохо для бронхо-легочного отдела.
Кроме того, по мнению многих специалистов, применение банок может способствовать
распространению в организме инфекции. А потому в настоящее время в лечебной
практике банки не применяются.</font></font>
<p><a NAME="Баня"></a><b><font face="Times New Roman"><font size=+1>Баня</font></font></b>
<p><font face="Times New Roman"><font size=+0>Обычно человек, имеющий слабое
представление о том, как нужно пользоваться баней, считает, что в этом
нет ничего сложного. Люди, думающие подобным образом, заблуждаются. Искусство
банной процедуры складывается из многих компонентов: подготовки оптимального
жара, создания необходимой влажности воздуха и приятных запахов в парилке,
</body></html>';

$pattern = '/<a NAME=".*?<\/font><\/font>|<a NAME="/si'; // так видит названия
preg_match_all($pattern, $text, $matches, PREG_PATTERN_ORDER);
print_r($matches[0]);
?>

  Ответить  
 
 автор: cheops   (18.01.2011 в 09:46)   письмо автору
 
   для: alexan   (18.01.2011 в 04:58)
 

>1. от названия ‘<a NAME="’ и до ‘</font></font>’ перед следующим ‘<a NAME="’ и конечно чтоб
>ложил каждый вырезанный кусок в свою ячейку для дальнейших действий над ним.
Правильно ли я понимаю, что эта задача решена?

>2. Последний кусок должен быть вырезан до ‘</body></html>’
А от куда кусок должен начинаться?

  Ответить  
 
 автор: alexan   (18.01.2011 в 17:07)   письмо автору
 
   для: cheops   (18.01.2011 в 09:46)
 

Извините, видимо не очень хорошо сформулировал.
В приведенном коде в массив складываются только названия.
Нужно, чтобы скрипт сложил все куски текста от названия ‘<a NAME="’ и до ‘</font></font>’ перед следующим ‘<a NAME="’ то есть вырезал эти куски в разные ячейки массивов, а последнее вхождение от названия ‘<a NAME="’ и до ‘</font></font>’ перед ‘</body></html>’

И при этом массив должен быть не ассоциативный, просто в $matches[0][0] должен лежать кусок текста "<a NAME="Бактерии"></a><b><font face="Times New Roman"><font size=+1>Бактерии</font></font></b>
<p><font face="Times New Roman"><font size=+0>«Уничтожим все бактерии,
и все будет в порядке!» Так думают многие. Однако далеко не все бактерии
вредны, а потому исльзовании подобных средств нарушается естественный
«микробный фон», вследствие чего кожа становится уязвимой и легко инфицируется.
Дерматологи отмечают, что подобные процессы происходят и при ежедневном
протирании лица средствами от угревой сыпи (кроме того, они еще и уплотняют
кожу).</font></font>"

В $matches[0][1] = "<p><a NAME="Бальзам Караваева"></a><b><font face="Times New Roman"><font size=+1>Бальзам
Караваева</font></font></b>
<p><font face="Times New Roman"><font size=+0>Если верить рекламе, то бальзамы
Караваева лечат чуть ли не от всех болезней. Но так ли это? Увы, реклама
вводит потребителей в заблуждение. А потому и шлют они возмущенные письма
в редакциосом убеждает нас:левания, которые обещали вылечить
бальзамы Караваева. Мы оба страдали от невралгии, радикулита и болей в
суставах и позвоночнике, связанных с отложением солей...</font></font>"

В $matches[0][2] = следующий и т.д.

  Ответить  
 
 автор: cheops   (18.01.2011 в 17:53)   письмо автору
 
   для: alexan   (18.01.2011 в 17:07)
 

Попробуйте так
<?php
$pattern 
'#NAME="(.*?)<\/font><\/font>.*?<p>(.*?)(<p><a|</body>)#si';
preg_match_all($pattern$text$matchesPREG_PATTERN_ORDER);
unset(
$matches[0]);
print_r($matches); 
?>

  Ответить  
 
 автор: alexan   (18.01.2011 в 19:34)   письмо автору
 
   для: cheops   (18.01.2011 в 17:53)
 

Этот вариант не раскладывает куски текста по ячейкам, на выходе получается вот что:

'
Array ( [0] => Array ( [0] => NAME="Бактерии">Бактерии
«Уничтожим все бактерии, и все будет в порядке!» Так думают многие. Однако далеко не все бактерии вредны, а потому использование мыла против бактерий ежедневно вряд ли можно назвать оправданным, о чем мы уже говорили выше (см. статью «Антибактериальное мыло»). Его употребление вполне уместно при порезах, ссадинах и царапинах. Однако при постоянном использовании подобных средств нарушается естественный «микробный фон», вследствие чего кожа становится уязвимой и легко инфицируется. Дерматологи отмечают, что подобные процессы происходят и при ежедневном протирании лица средствами от угревой сыпи (кроме того, они еще и уплотняют кожу).

NAME="Бальзам Караваева">Бальзам Караваева

Если верить рекламе, то бальзамы Караваева лечат чуть ли не от всех болезней. Но так ли это? Увы, реклама вводит потребителей в заблуждение. А потому и шлют они возмущенные письма в редакции газет, где рассказывают о своем неудачном опыте лечения с помощью бальзамов Караваева. Вот пример подобного письма, пришедшего в редакцию газеты «Известия» от ветерана Вооруженных сил Владимира Бредихина: «В течение нескольких лет широко рекламируются бальзамы Караваева — «Аурон», «Соматон» и «Ви-таон». Нас уговаривают купить смеси из этих лекарственных растений, утверждая, что ими можно вылечить все болезни человека. По радио некая Елена Дорофеева ангельским голосом убеждает нас: «Хоть поверьте, хоть проверьте...» Но я не поверил этой сказке и решил проверить бальзам на себе. Тем более что я и моя супруга имели некоторые заболевания, которые обещали вылечить бальзамы Караваева. Мы оба страдали от невралгии, радикулита и болей в суставах и позвоночнике, связанных с отложением солей...

Мы попробовали на себе все три бальзама. Если вы спросите, какие были результаты лечения, я отвечу — ноль. Я обратился в Минздрав. В Бюро регистрации лекарственных препаратов охарактеризовали рекламу этих бальзамов как откровенный обман. При этом отметили, что бальзамы Караваева лекарством не являются и относятся к косметическим средствам...»

Эксперт газеты «Известия» кандидат медицинских наук А. Мельников уточняет, что из всех трех бальзамов лекарством является только «Витаон», но и его рекламные обещания гораздо щедрее возможностей. Он отмечает: «В рекламном листке «Витаон» представляется даже как «незаменимое средство для повышения лактации» и, кроме того, «нормализует микрофлору кишечника младенца». При этом в «Регистре» (Регистре лекарственных средств. — С.М.) даже нет указания на то, что «Витаон» можно принимать внутрь, тем более младенцам. Масло «Витаон» зарегистрировано только как наружное средство. И это не случайно: в его состав входит весьма агрессивный чистотел. Ожидать, что он будет полезным для кишечника младенца, не стоит.

«Аурон» и «Соматон» к лекарствам не относятся, но их рекламные посулы еще беззастенчивее».

Вполне возможно, что бальзамы Кара-ваевадействительно могут оказаться полезными при некоторых, но отнюдь не всех, заболеваниях. Но реклама, вводящая потребителей в заблуждение, может дискредитировать любое, даже неплохое, средство.

NAME="Банки">Банки

До сих пор многие думают, что банки, широко применявшиеся до недавних пор в лечебной практике, — эффективное средство при различных простудных заболеваниях. Даже медики были убеждены в том, что правильно поставленные банки оказывали положительное влияние на организм и стимулировали быстрое рассасывание очагов воспаления. Более того, считалось, что даже кровоподтеки на месте банок полезны. Это как бы лечение собственной кровью, по-научному — аутогемотерапия, повышающая защитные силы организма.

Но оказалось, что все далеко не так. Исследования ученых показали, что кровоподтеки образуются не только на коже спины, но и на плевре, а это уже плохо для бронхо-легочного отдела. Кроме того, по мнению многих специалистов, применение банок может способствовать распространению в организме инфекции. А потому в настоящее время в лечебной практике банки не применяются.

Array ( [0] => Бактерии">Бактерии [1] => Бальзам Караваева">Бальзам Караваева [2] => Банки">Банки ) [2] => Array ( [0] => «Уничтожим все бактерии, и все будет в порядке!» Так думают многие. Однако далеко не все бактерии вредны, а потому использование мыла против бактерий ежедневно вряд ли можно назвать оправданным, о чем мы уже говорили выше (см. статью «Антибактериальное мыло»). Его употребление вполне уместно при порезах, ссадинах и царапинах. Однако при постоянном использовании подобных средств нарушается естественный «микробный фон», вследствие чего кожа становится уязвимой и легко инфицируется. Дерматологи отмечают, что подобные процессы происходят и при ежедневном протирании лица средствами от угревой сыпи (кроме того, они еще и уплотняют кожу). [1] => Если верить рекламе, то бальзамы Караваева лечат чуть ли не от всех болезней. Но так ли это? Увы, реклама вводит потребителей в заблуждение. А потому и шлют они возмущенные письма в редакции газет, где рассказывают о своем неудачном опыте лечения с помощью бальзамов Караваева. Вот пример подобного письма, пришедшего в редакцию газеты «Известия» от ветерана Вооруженных сил Владимира Бредихина: «В течение нескольких лет широко рекламируются бальзамы Караваева — «Аурон», «Соматон» и «Ви-таон». Нас уговаривают купить смеси из этих лекарственных растений, утверждая, что ими можно вылечить все болезни человека. По радио некая Елена Дорофеева ангельским голосом убеждает нас: «Хоть поверьте, хоть проверьте...» Но я не поверил этой сказке и решил проверить бальзам на себе. Тем более что я и моя супруга имели некоторые заболевания, которые обещали вылечить бальзамы Караваева. Мы оба страдали от невралгии, радикулита и болей в суставах и позвоночнике, связанных с отложением солей...

Мы попробовали на себе все три бальзама. Если вы спросите, какие были результаты лечения, я отвечу — ноль. Я обратился в Минздрав. В Бюро регистрации лекарственных препаратов охарактеризовали рекламу этих бальзамов как откровенный обман. При этом отметили, что бальзамы Караваева лекарством не являются и относятся к косметическим средствам...»

Эксперт газеты «Известия» кандидат медицинских наук А. Мельников уточняет, что из всех трех бальзамов лекарством является только «Витаон», но и его рекламные обещания гораздо щедрее возможностей. Он отмечает: «В рекламном листке «Витаон» представляется даже как «незаменимое средство для повышения лактации» и, кроме того, «нормализует микрофлору кишечника младенца». При этом в «Регистре» (Регистре лекарственных средств. — С.М.) даже нет указания на то, что «Витаон» можно принимать внутрь, тем более младенцам. Масло «Витаон» зарегистрировано только как наружное средство. И это не случайно: в его состав входит весьма агрессивный чистотел. Ожидать, что он будет полезным для кишечника младенца, не стоит.

«Аурон» и «Соматон» к лекарствам не относятся, но их рекламные посулы еще беззастенчивее».

Вполне возможно, что бальзамы Кара-ваевадействительно могут оказаться полезными при некоторых, но отнюдь не всех, заболеваниях. Но реклама, вводящая потребителей в заблуждение, может дискредитировать любое, даже неплохое, средство. [2] => До сих пор многие думают, что банки, широко применявшиеся до недавних пор в лечебной практике, — эффективное средство при различных простудных заболеваниях. Даже медики были убеждены в том, что правильно поставленные банки оказывали положительное влияние на организм и стимулировали быстрое рассасывание очагов воспаления. Более того, считалось, что даже кровоподтеки на месте банок полезны. Это как бы лечение собственной кровью, по-научному — аутогемотерапия, повышающая защитные силы организма.

Но оказалось, что все далеко не так. Исследования ученых показали, что кровоподтеки образуются не только на коже спины, но и на плевре, а это уже плохо для бронхо-легочного отдела. Кроме того, по мнению многих специалистов, применение банок может способствовать распространению в организме инфекции. А потому в настоящее время в лечебной практике банки не применяются. ) [3] => Array ( [0] =>


'

И то что между последним тегом, <a name=" и до </body></html> он вообще не видит

  Ответить  
 
 автор: cheops   (18.01.2011 в 20:39)   письмо автору
 
   для: alexan   (18.01.2011 в 19:34)
 

Я использовал текст из вашего первого сообщения, у меня получается 4 куска текста - вы его используете во время теста? Используйте unset($matches[0]);, чтобы было удобнее просматривать результаты.

  Ответить  
 
 автор: alexan   (19.01.2011 в 04:40)   письмо автору
 
   для: cheops   (18.01.2011 в 20:39)
 

Я использовал текст из вашего первого сообщения, у меня получается 4 куска текста - вы его используете во время теста? Используйте unset($matches[0]);, чтобы было удобнее просматривать результаты.

А у меня чего-то только три куска, последнего нет.. Может чего с Денвером, он у меня по 7 стоит? Ну да ладно, и это уже класс, ОГРОМНОЕ, ЧЕЛОВЕЧЕСКОЕ СПАСИБО! Я всегда знал, что здесь знающие люди!

  Ответить  
 
 автор: SHAman   (18.01.2011 в 10:01)   письмо автору
 
   для: alexan   (18.01.2011 в 04:58)
 

Задача какая? Получить ассоциативный массив с названиями и соответствующим контентом?

  Ответить  
 
 автор: alexan   (18.01.2011 в 19:26)   письмо автору
 
   для: SHAman   (18.01.2011 в 10:01)
 

>Задача какая? Получить ассоциативный массив с названиями и соответствующим контентом?
Нет массив должен быть обычный... хотя все равно, главное чтобы скрипт выдирал из текста куски между указанных выше тегов.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования