RegEx

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
Zvepr
Сообщения: 48
Зарегистрирован: 23 дек 2004, 14:34

16 фев 2005, 14:34

Мне может кто-нибудь, глупому, растолковать, НА КОЙ ЭТИ RegExы, если они по разному работают???

Задача стандартная: удалить из текста все теги. Пусть даже в тексте есть не тэг, например "<хахаха>" - его тож можно убить, не жалко... Но что б оно только работало!

Значит теслил под linux-apache-ем все замечательно работало при таком вот раскладе:

$res=ereg_replace('<.*>', '', $text);

под виндовым апачем такое дело убивает весть текст (потому что в конце текста тоже тэг). Впрочем и на хостинге с тоже.

ТАК ВОТ КАК СДЕЛАТЬ ТО, ЧТОБ УБИТЬ ВСЕ ТЭГИ???!!!

пробывал уже "одно или ноль повторения" ? - везде повтыкал, и ^ и $ и все это компоновал... и мля ниче все равно не работет везде!!!

....спасибо заранее
UUU
Сообщения: 309
Зарегистрирован: 17 фев 2004, 09:27
Откуда: Иваново
Контактная информация:

16 фев 2005, 16:18

А вот почитать о регехспах слабо* конструкция <.*> означает все, между первым < и последним >
Т.е. должна убить все.

Вот, что пишет perldoc -q html

Here's one "simple-minded" approach, that works for most files:

#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

16 фев 2005, 16:38

AFAIK есть два вида регекспов - ДКА (детерминированный конечный автомат) и НКА (недетерминированный конечный автомат)
ДКА идет циклом по регекспу, и параллельно отмечает соответствие/несоответствие текста регекспу.
НКА наоборот идет циклом по строке, и смотрит в регексп.
Первый очень стабильно быстрый, но второй предоставляет кучу фичей типа нежадного поиска, обратных ссылок etc.
PHP имеет оба типа регекспов - первый через семейство функций ereg*, второй через preg*.
Поскольку ereg* - это ДКА, то опция нежадного поиска в нем не предуспотрена.
Пользуйся preg_ - там можно написать .*?
2B OR NOT(2B) = FF
Zvepr
Сообщения: 48
Зарегистрирован: 23 дек 2004, 14:34

16 фев 2005, 17:52

UUU писал(а):А вот почитать о регехспах слабо* конструкция <.*> означает все, между первым < и последним >
Т.е. должна убить все.

Вот, что пишет perldoc -q html

Here's one "simple-minded" approach, that works for most files:

#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
Ну о регеехспах почиатать не слабо... было бы где?! На русском ниче толкового не нашел. может плохо искал. Конечно можно, найти на английском, но честно говоря, это не та тема, которую можно учить почти с нуля на английском, как говориться "БЕЗ Б", по крайней мере для меня. Не дорос я еще до этого уровня, но стремлюсь. тем более, время меня поджимает. поэтому и решил сюда обратиться.

по поводу <.*> - я понял что убивает ОТ и ДО. я говорил, что и по другому пробывал. читайте выше.

спасибо, конечно за пример, но мне бы желательно ПХП, потмоу что в перле я дуб-дубом, впрочем как и в регексах. Не прошу вылоджить код, просто поясните че и как оно работает. потому что кроме . * \1 я ниче не понял...
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

19 фев 2005, 08:52

На русском ниче толкового не нашел
Издательство O'Reilly. Книга Mastering Regular Expressions. Перевод делали как минимум в издательстве Питер
Даже самый дурацкий замысел можно воплотить мастерски
Zvepr
Сообщения: 48
Зарегистрирован: 23 дек 2004, 14:34

19 фев 2005, 12:56

мгм, спасибо, но strip_tags мне все таки больше понравилось )))
Ответить