Forum Webscript.Ru
Программирование => Регулярные выражения => Тема начата: CGVictor от 25 Декабря 2003, 16:37:30
-
Задача, собственно, следующая:
Необходимо получить из текста все вхождения вида:
<$starttag>$somecontent<$endtag>
$starttag и $endtag известны.
$somecontent надо получить.
Вхождений может быть больше одного.
В регулярных я не силен, так что очень желателен "рассказ с показом"... Ну обьясните please...
И, если возможно, с уклоном в PHP.
Заранее спасибо.
-
$txt = " some content
second
next content ";
$start_tag = \'starttag\';
$end_tag = \'endtag\';
preg_match_all("~(?<=<".$start_tag.">).+?(?=<".$end_tag.">)~si", $txt, $m);
print_r($m);
-
похоже у форума какая-то баго-фича : в комбинацию "знак больше и скобка" он вставляет пробел.
>) - должно быть везде без пробела между ними
-
на вскидку:
$content = "somecontent
somecontent1
somecontent2";
preg_match_all("/([^<>]*)/i", $content, $matches);
print_r($matches);
[^<>]* означает что совпадут любые символы, кроме < и >
долго писал... Макс ответил :)
-
Макс
я бы .+? не писал,
-
Yukko
предложи альтернативу
-
Макс
все зависит от того, что у него будет между тегами :)
Макс:
предложи альтернативу
[^<>]+
-
А если между тегами будут еще и другие подобные конструкции, типа:
text
???
-
Твой ответ, ИМХО, тут:
http://xpoint.ru/forums/programming/PHP/thread.xhtml?id=22322
http://xpoint.ru/forums/programming/PHP/thread/23963.xhtml
-
Там люди сошлись на парсере ХМЛ. Я, в принципе, тоже на другое и не надеялся.
Спасибо.