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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Странная работа с многострочными текстами, проблема с preg_replace 
V
    Опции темы
DOKA
Дата 23.3.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день!

Начал работать с PHP и столкнулся с данной проблемой: неверно обрабатывается многострочный текст при использовании регулярных выражений.

При этом мой паттерн нормально работает в дебаггере регекспов (Kodos) и я применяю  модификатор /ms

Вот пример использования паттерна: 

Код

preg_replace('/\{\{.*?\}\}/ms', '', $html);


Смысл: удалить все вхождения {{какой-то текст}}

На данном тексте всё работает правильно:

Код

abc {{ xxx yyy }} zxy

преобразуется в

abc  zxy



А этот пример отрабатывает странно:

Код

abc
{{ xx
x
y
zz }}
zxy

преобразовывается в

x
y
zz }}
zxy


Т.е. удаление происходит, но только первой строки из найденого выражения!

Помогите, пожалуйтста, побороть.
PM MAIL   Вверх
enof
Дата 23.3.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DOKA, 
модификатор m служит для того, чтобы символы начала и конца строк совпадали не только с концом и началом текста, но символов переноса строки.
Вам нужен модификатор s - тогда точка будет совпадать и с символами переноса строк. Без него точка совпадает с любым символом, кроме
переноса строки, соответственно у вас и удаляется до переноса строки.
PM MAIL ICQ Skype   Вверх
DOKA
Дата 23.3.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(enof @ 23.3.2009,  14:41)
DOKA, 
Вам нужен модификатор s...

Я в первом посте указал, что использую и m и s: уже и так и сяк перепробывал, всё равно происходит поведение указанное в первом посте :(
PM MAIL   Вверх
enof
Дата 23.3.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



DOKA, сорри, не заметил.
Код

echo preg_replace('#\{\{.*\}\}#s', '', $str);

PM MAIL ICQ Skype   Вверх
DOKA
Дата 23.3.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(enof @ 23.3.2009,  15:37)
DOKA, сорри, не заметил.
Код

echo preg_replace('#\{\{.*\}\}#s', '', $str);

Неа, так тоже не помогает...  smile 
PM MAIL   Вверх
enof
Дата 23.3.2009, 18:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

<?php
$str = "abc
{{ xx
x
y
zz }}
zxy
";
echo preg_replace('#\{\{.*\}\}#s', '', $str);
?>

работает smile 
PM MAIL ICQ Skype   Вверх
DOKA
Дата 24.3.2009, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Хм, действительно работает. Просто оказалось, что у меня есть вложенные структуры и поэтому выход всё равно оказался невалидным. Но это уже решаемо smile

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


 




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


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

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