Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> preg_replace не берет строку, preg_replace не берет строку 
:(
    Опции темы
mikla
Дата 1.11.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



дело вот в чем. нужно заменить в строке все что находиться между тегами [loop] [/loop]

1. этот код
Код

$text = <<<EER
[loop] some ttext  :
some text[/loop] 
EER;
$new_text = preg_replace("/\[loop\](.*)\[\/loop\]/i"," new text ",$text);
echo $new_text;


выведет мне 

Код

[loop] some ttext : some text[/loop]


2. а этот код отработает нормально
Код

$text = "[loop] some ttext  :some text[/loop]";
$new_text = preg_replace("/\[loop\](.*)\[\/loop\]/i"," new text ",$text);
echo $new_text;


и выведет 

Код

new text


1. почему так происходит ? 
2. как сделать так чтобы preg_replace "съел" строку, к-рая задана в 1м примере ? 
--------------------
PM MAIL ICQ Skype   Вверх
Fally
Дата 2.11.2007, 01:02 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: нет
Всего: 4



Цитата(mikla @  1.11.2007,  23:43 Найти цитируемый пост)
$text = <<<EER
[loop] some ttext  :
some text[/loop] 
EER;
$new_text = preg_replace("/\[loop\](.*)\[\/loop\]/i"," new text ",$text);
echo $new_text;

Про модификатор s забыли, чтобы таких глюков не было, рассматривайте строку в однострочном режиме, т.е. рега такая:
Код

$new_text = preg_replace("/\[loop\](.*)\[\/loop\]/is"," new text ",$text);


Это сообщение отредактировал(а) Fally - 2.11.2007, 01:06


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
mikla
Дата 2.11.2007, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



Fally, Спасибо большое. 
--------------------
PM MAIL ICQ Skype   Вверх
mikla
Дата 2.11.2007, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



еще одна проблема с регуляркой. нужно опять же взять то что между тегами [loop] [/loop] и сложить в массив.
делаю так 
Код

$textDR = "[loop] Text [/loop] [loop] Text [/loop]";
$split_arr = preg_split('/\[loop\](.*)\[\/loop\]/is',$textDR);
print_r($split_arr);        


вижу 
Код

Array
(
    [0] => 
    [1] => 
)


что я опять не так делаю ?

Это сообщение отредактировал(а) mikla - 2.11.2007, 20:06
--------------------
PM MAIL ICQ Skype   Вверх
webevt
Дата 2.11.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 235
Регистрация: 5.5.2005

Репутация: нет
Всего: 3



mikla, 

Код

$textDR = "[loop] Text [/loop] [loop] Text [/loop]";
$split_arr = preg_split('/\[loop\](.*?)\[\/loop\]/is',$textDR);
print_r($split_arr); 

Вопросик после * поставить нужно
PM MAIL   Вверх
mikla
Дата 2.11.2007, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 3.12.2006
Где: Витебск

Репутация: нет
Всего: нет



webevt хм. у меня не работает ваш вариант. 

я сделал вот так : 

Код

preg_match_all('/\[loop\](.*)\[\/loop\]/isU',$textDR,$split_arr)


ну и получается что в $split_arr[0][i]лежить все что надо smile
--------------------
PM MAIL ICQ Skype   Вверх
flashaa
Дата 5.11.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 2
Всего: 25



При работе с preg_split в регулярке задается именно разделитель массива, а в начале темки туда помещали выражения для элемента.. Да ещё с маской, которая тут никак не обрабатывается.
Через preg_split тоже можно вот так вот:
Код

preg_split(/\[loop\]|\[\/loop\]/, $string)

Только минус будет в том, что в массив совпадений попадут фрагменты строки перед первым [loop] и после последнего [/loop], т.е. 2 лишних эл-та. А вообще это кривое решение, preg_match_all в предыдущем сообщение - самое верное.


Это сообщение отредактировал(а) flashaa - 5.11.2007, 12:17
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.