Внимание! В связи с устареванием топика эта страница была взята из кэша.
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 02/09/03 в 17:15
|
|
3й день бьюсь... надо из любого ХТМЛ файла, для примера $html="<b>hhjk </b>suka <b>suka4ok </b>"; вытащить все совпадения искомого слова (к примеру suka) между тагов (к примеру <b> </b>)
т.е. в данном случае хотелось бы получить что то вроде <b>suka4ok </b>
HELP !!!
|
K началу
|
|
|
Alexus
Зарегистрирован: 07.11.02
Сообщения: 722
|
Добавлено: 02/09/03 в 17:20
|
|
perl | php ?
|
K началу
|
|
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 02/09/03 в 17:29
|
|
пишу на РНР... последние варианты были
preg_match_all("/<$tag([^<]{1}[^\/]{1}[".substr($tag,0,1)."]{1})*".$term.".*<\/$tag>/isU",$html,$found,PREG_SET_ORDER)
preg_match_all("/<$tag>[^<]+[^\/]+[^".substr($tag,0,1)."]+".$term.".*<\/$tag>/isU",$html,$found,PREG_SET_ORDER)
где $tag="b"; - таг между которым искать. $term="suka"; - то что ищем. $html - исходный ХТМЛ.
(варианты не правильные к сожалению )
Повторю проблему.... надо найти ВСЕ варианты когда искомое слово находиться ВНУТРИ нужного тага. (т.е. искать до первого закрытия тага)
|
K началу
|
|
|
Ras
Зарегистрирован: 12.08.03
Сообщения: 5
|
Добавлено: 02/09/03 в 18:21
|
|
А зачем регулярка? $tag='<b';$ctag='</b';$result=array(); $html=explode ($tag,$html); потом для каждого элемента $html: отрезаем все, что после закрывающего тэга $html[$i]=substr($html[$i],0,strpos($html[$i],$ctag)); ищем if (strpos($html[$i],$term)>0) { и если находим - делаем что надо, например убираем открывающий и закрывающий тэг и запихиваем в массив найденного. $start=strpos($html[$i],'>');$length=strpos($html[$i],$ctag)-$start; $new=substr($html[$i],$start,$length); array_push($result,$new); }
|
K началу
|
|
|
Alexus
Зарегистрирован: 07.11.02
Сообщения: 722
|
Добавлено: 02/09/03 в 19:31
|
|
уточни пож. между двумя тегами. открвающим и закрывающим может находится любое количество слов? нужно вытаскивать всю строку или только похожее слово? если только слово и если находится несколько похожих слов между парой тегов нужно вытаскивать каждое?
|
K началу
|
|
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 02/09/03 в 23:17
|
|
1.Да, между тагами может быть любое количество слов и даже ДРУГИЕ таги. 2. точное совпадение словабуеться... т.е. если искомое являеться частью другого - то это нормально.
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 03/09/03 в 02:40
|
|
bog писал: | 1.Да, между тагами может быть любое количество слов и даже ДРУГИЕ таги. 2. точное совпадение словабуеться... т.е. если искомое являеться частью другого - то это нормально. |
-----Сори, не въехал было дело--------
Попробую помочь.
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 03/09/03 в 03:56
|
|
Вобщем после двух часов геммороя я понял, что винда не понимает регулярные PCRE выражения, содержащие рекурсию. Да и ну их нах :-) Альтернатива: Под воздействием немеряного количества пива вот что получилось:
Код: | <? $term="suka"; $tag="td"; $html="<b>hhjk </b>suka <table border=0> <tr> <td> <a href=http://yahoo.com>suka4ok </a> Hi! </td> <td>Hello once more suka4ok!</td> </tr> </table>";
$r="/(<({$tag})[^>]*>)(.*)(<\/\\2>)/isU";
preg_match_all ($r, $html, $matches, PCRE_EXTENDED);
if (is_array($matches[0])) { for ($i=0; $i< count($matches[0]); $i++) { if (eregi("$term",$matches[3][$i])) { echo "Match found: ".$matches[0][$i]."\n"; } } } else echo "No matches\n"; ?>
|
Ну или так:
Код: | $term="suka"; $tag="b"; $html="<b>hhjk </b>suka <table border=0> <tr> <td> <b><a href=http://yahoo.com>suka4ok </a> </b>Hi! suka! </td> <td>Hello once<b> more <i>suka4ok!</i></b></td> </tr> </table>"; ..... (Дальше по тексту)
|
однако такую конструкцию из-за отсутствия рекурсии он не пойиет правильно:
Код: | $term="suka"; $tag="b"; $html="<b>hhjk <b>suka</b> </b>"; ....
|
Хотя такое довольно редко встречается с тегами форматирования. А вот с тегами таблицы - часто :-(
Если тебя эта проблема смущает, тогда я думаю можно распарсить все вложенности тегов. Или на крайняк применить XML парсер, что-ли? HTML это тоже ведь своеобразный XML (хотя скорей наоборот). Хотя нет. К XML очень жесткие требования синтаксиса, которых нет в HTML. XML парсер наверно закипит от кусочка кода русского вэб-мастера :-)
|
K началу
|
|
|
bog
Зарегистрирован: 07.11.02
Сообщения: 1595
|
Добавлено: 03/09/03 в 12:58
|
|
Эх, то на что я надеялся не получилось, но все равно всем спасибо, подали пару идей ;)
|
K началу
|
|
|
Pentarh
Зарегистрирован: 05.04.03
Сообщения: 1376
|
Добавлено: 16/09/03 в 09:17
|
|
Кстати, самому себе помог, еще не зная что это будет :-)
Сидел тут голову часа четыре ломал над одним регулярным выражением, а потом вспомнил, что по пьяне когда-то запостил это же выражение сюда.
Вот, теперь пользуюсь :-)
Вывод: Пейте пиво! Ешьте мясо!
|
K началу
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |
Внимание! В связи с устареванием топика эта страница была взята из кэша.
|