|
|
|
| В общем задачка такая
дается строка вида
[item]text1[/text]
[item]text2[/text]
[item]text3[/text]
или так [item]text1[/text][item]text2[/text][item]text3[/text]
отсюда нужно вытащить все что между [item] и [/item] то есть tex1,text2,text3 и загнать их в массив
я сделал это так
$str = (string)$str; //строка
$items = array(); //массив в который потом попадут тексты
while(preg_match("#\n?\[item\](.+?)\[\/item\]\n?#",$str,$code)) {
$items[] = $code[1];
}
|
но в результате я получаю бесконечный цикл!подскажаите что тут не то | |
|
|
|
|
|
|
|
для: ZAHTET
(04.06.2007 в 14:07)
| | Функция preg_match возвращает количество совпадений шаблона: либо 0 (совпадений нет), либо 1 (совпадение найдено) и на этом останавливается. Т.к. вы поставили её в условие цикла и исходная строка не изменяется, то она постоянно возвращает (int) 1, что эквивалентно (bool) true, образуя бесконечный цикл. preg_match не изменяет исходную строку, т.е и в первый, и во второй, и в третий проход она будет проврять одну и ту же строку, находить одно и то же совпадение.
----------
Вы определитесь, в примере тег [item] закрывается тегом [/text], а в решении проверяется на закрывающий тег [/item].
Вот возможное решение:
<?php
$str='[item]text1[/text][item]text2[/text][item]text3[/text]';
$str=(string)$str; //строка
preg_match_all('#\[item\](.+?)\[/text\](?:\n)?#',$str,$code); #
$items=$code[1];
?>
|
P.S.: preg_match_all, в отличии от preg_match, проходит сразу по всем совпадениям. | |
|
|
|
|
|
|
|
для: sms-send
(04.06.2007 в 14:14)
| | Спасибо огромное,у меня все заработало,на буджующее учту что есть такая функция preg_match_all)) Да там кстати вместо text в теге должно было быть item
P.S. Извиняюсь что вчера наехал в теме про задачу | |
|
|
|