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

Поиск:

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


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



имееться контент
Код
<11   fjdsgkjsdafhgas> ыыаврыва<11 jhsdafgjkahkgjs>

применяю
preg_replace("/<11.*>/","", content);
и хочу что бы получилось ыыаврыва
А получаеться пустата
я так понимаю он нашел <11 потом с конца нашел > и все это заменил

как мне этого избежать


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Secandr
Дата 16.6.2004, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Step preg - жадный алгорит .* - это любой символ любое количество раз.
И если у тебя будет строка:
Цитата
<11  fjdsgkjsdafhgas> ыыаврыва<11 jhsdafgjkahkgjs> ыппалвпывтипьтваипыварплоывиаптьв <a href="/">35342</a>
То .* у тебя "захавает" как можно больше символов, в моём примере:
Цитата
  fjdsgkjsdafhgas> ыыаврыва<11 jhsdafgjkahkgjs> ыппалвпывтипьтваипыварплоывиаптьв <a href="/">35342</a


Измени регулярное выражение на:
Код
preg_replace("/<11[^>]*>/","", content);
Тогда твой жадный алгоритм не выйдет за первую попавшуюся скобку ">"


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Master
Дата 16.6.2004, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

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



посмотри что ты делаеш... твоя строка совпадает с текстом и заменяется на ничто, а тебе надо сделать так:

Код
preg_replace("/<11.*>(.*)<11.*>/","\\1", content);



--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
Step
Дата 16.6.2004, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Secandr, не работает


Master , подозреваю ты что-то не правильно понял



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Master
Дата 16.6.2004, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1530
Регистрация: 13.5.2003
Где: Mother Russia

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



я не знаю что я не так понял, но результат выводит:

ыыаврыва

или ты хотел что-то другое?


--------------------
Вавилон, Вавилон
Что ты построил, что разрушил?
Вавилон, Вавилон
Плавятся души дьявольским огнем.
PM WWW ICQ   Вверх
Step
Дата 16.6.2004, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Secandr, очень близко но удаляет только <11

Добавлено @ 10:27
Master, объясни свой код может я пойму свою ошибку



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
MuToGeN
Дата 16.6.2004, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

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



Вообще должно прекрасно работать (сам тестил) preg_replace("/<11[^>]*>/","", content) и preg_replace("/<11.*>/U","", content)

Master, без ключа U под .* попадает и последний <11[^>]*>, поэтому оно и не ловится.



--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Step
Дата 16.6.2004, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Давайте попробую другой вариант подскажите такую вещь


preg_replace("/<11[на сколько я понимаю сюда можно вставить A-Za-z и надо вставить еще все символы кроме >]*>","", content);


как это сделать
Добавлено @ 10:48
MuToGeN, твой вариант работает, но я тербую smile.gif объяснения что есть ключ U у меня в книге он даже не упоминаеться


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
MuToGeN
Дата 16.6.2004, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

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



[все символы кроме >] - это и есть [^>]
Насчет ключа U.
Если максимально понятно (на мой взгляд) и без терминов а-ля "жадность квантификаторов": без этого ключа под каждую часть твоего регекспа будет попадать все, что под него подходит. С ним - все, что подходит, за исключением того, что описано следующим. Т.е., для данной ситуации...
Имеем регексп: /<11.*>/
Вдумываемся в смысл: под .* попадает любые символы в любом колличестве, в.т.ч. и >, вот и получается, что реплейсится вся строка и парсер не обращает внимания на то, что дальше в регекспе стоит >. Ставим ключ U. Тогда парсер начинает обращать внимание на последний >, и под .* этот символ в строке уже не попадет.


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Ignat
Дата 16.6.2004, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



Почти по теме.
To MuToGeN:
У меня трабл был, под класс [[:print:]] попадало все кроме русских симвлов, как с этим бороться?



--------------------
Теперь при чем :P
PM   Вверх
MuToGeN
Дата 16.6.2004, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

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



Цитата
как с этим бороться?
Это - проблемы с локалью. Можно попробывать побороться с помошью setlocale()


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Step
Дата 16.6.2004, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



Всем спасибо


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Secandr
Дата 16.6.2004, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



Мой код вполне великолпно работает.
Код
<?
echo preg_replace("/<11[^>]*>/","", "<11   fjdsgkjsdafhgas> ыыаврыва<11 jhsdafgjkahkgjs>");
?>



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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