regexp в php
дано "<tag>111</tag>". надо выделить все что между ними. пишем ~<tag>(.*)</tag>~. все выделается.
если будем разбирать файл типа:
<tag>111</tag>
<tag>222</tag>
<tag>333</tag>
<tag>444</tag>
(то есть несколько строк с одним вхождением пары тегов)то тоже все хорошо. в массив уйдет [0] => "111", [1] => "222" и тд. НО! если будет разбирать строку с двумя (и более) вхождениями пар тегов, например "<tag>111</tag> блабла <tag>222</tag>" то в массив уйдет [0] => "111</tag> блабла <tag>222".
как быть?
вопрос 2:
есть текст:
блабла
блабла <tag1>1111</tag1> блабла
блабла <tag2>2222</tag2> блабла
блабла
блабла <tag1>3333</tag1> блабла
блабла <tag2>4444</tag2> блабла
надо выделить (1111,2222,3333,4444).
выражение типа ~.*<tag1>(.*)</tag1>.*<tag2>(.*)</tag2>.*~ не прокатывает Ж)хотя по отдельности все прекрасно.
Код:
<?
$s="
блабла
блабла <tag1>1111</tag1> блабла
блабла <tag2>2222</tag2> блабла
блабла
блабла <tag1>3333</tag1> блабла
блабла <tag2>4444</tag2> блабла";
preg_match_all("/<tag1>([^<]*)<\/tag1>/",$s,$r,PREG_PATTERN_ORDER);
print_r($r[1]);
preg_match_all("/<tag2>([^<]*)<\/tag2>/",$s,$r,PREG_PATTERN_ORDER);
print_r($r[1]);
?>
$s="
блабла
блабла <tag1>1111</tag1> блабла
блабла <tag2>2222</tag2> блабла
блабла
блабла <tag1>3333</tag1> блабла
блабла <tag2>4444</tag2> блабла";
preg_match_all("/<tag1>([^<]*)<\/tag1>/",$s,$r,PREG_PATTERN_ORDER);
print_r($r[1]);
preg_match_all("/<tag2>([^<]*)<\/tag2>/",$s,$r,PREG_PATTERN_ORDER);
print_r($r[1]);
?>