|
|
|
| Здравствуйте друзья.
Столкнулся намедни с серьезной задачкой, несколько часов над ней бился, но все как рыба об лед! Честно говоря работаю с регулярками не так часто как хотелось бы, видимо поэтому такой тормоз. Прошу сильно не пинать, а по возможности помочь. В общем нужно чтобы скрипт разбивал исходный текст следующим образом:
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]);
?> | |
|
|
|
|
|
|
|
для: alexan
(18.01.2011 в 04:58)
| | >1. от названия ‘<a NAME="’ и до ‘</font></font>’ перед следующим ‘<a NAME="’ и конечно чтоб
>ложил каждый вырезанный кусок в свою ячейку для дальнейших действий над ним.
Правильно ли я понимаю, что эта задача решена?
>2. Последний кусок должен быть вырезан до ‘</body></html>’
А от куда кусок должен начинаться? | |
|
|
|
|
|
|
|
для: 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] = следующий и т.д. | |
|
|
|
|
|
|
|
для: alexan
(18.01.2011 в 17:07)
| | Попробуйте так
<?php
$pattern = '#NAME="(.*?)<\/font><\/font>.*?<p>(.*?)(<p><a|</body>)#si';
preg_match_all($pattern, $text, $matches, PREG_PATTERN_ORDER);
unset($matches[0]);
print_r($matches);
?>
|
| |
|
|
|
|
|
|
|
для: 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> он вообще не видит | |
|
|
|
|
|
|
|
для: alexan
(18.01.2011 в 19:34)
| | Я использовал текст из вашего первого сообщения, у меня получается 4 куска текста - вы его используете во время теста? Используйте unset($matches[0]);, чтобы было удобнее просматривать результаты. | |
|
|
|
|
|
|
|
для: cheops
(18.01.2011 в 20:39)
| | Я использовал текст из вашего первого сообщения, у меня получается 4 куска текста - вы его используете во время теста? Используйте unset($matches[0]);, чтобы было удобнее просматривать результаты.
А у меня чего-то только три куска, последнего нет.. Может чего с Денвером, он у меня по 7 стоит? Ну да ладно, и это уже класс, ОГРОМНОЕ, ЧЕЛОВЕЧЕСКОЕ СПАСИБО! Я всегда знал, что здесь знающие люди! | |
|
|
|
|
|
|
|
для: alexan
(18.01.2011 в 04:58)
| | Задача какая? Получить ассоциативный массив с названиями и соответствующим контентом? | |
|
|
|
|
|
|
|
для: SHAman
(18.01.2011 в 10:01)
| | >Задача какая? Получить ассоциативный массив с названиями и соответствующим контентом?
Нет массив должен быть обычный... хотя все равно, главное чтобы скрипт выдирал из текста куски между указанных выше тегов. | |
|
|
|
|