PDA

Просмотр полной версии : RegEx



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

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

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

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

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

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

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

....спасибо заранее

UUU
16.02.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
16.02.2005, 16:38
AFAIK есть два вида регекспов - ДКА (детерминированный конечный автомат) и НКА (недетерминированный конечный автомат)
ДКА идет циклом по регекспу, и параллельно отмечает соответствие/несоответствие текста регекспу.
НКА наоборот идет циклом по строке, и смотрит в регексп.
Первый очень стабильно быстрый, но второй предоставляет кучу фичей типа нежадного поиска, обратных ссылок etc.
PHP имеет оба типа регекспов - первый через семейство функций ereg*, второй через preg*.
Поскольку ereg* - это ДКА, то опция нежадного поиска в нем не предуспотрена.
Пользуйся preg_ - там можно написать .*?

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

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

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

#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs

Ну о регеехспах почиатать не слабо... было бы где?! На русском ниче толкового не нашел. может плохо искал. Конечно можно, найти на английском, но честно говоря, это не та тема, которую можно учить почти с нуля на английском, как говориться "БЕЗ Б", по крайней мере для меня. Не дорос я еще до этого уровня, но стремлюсь. тем более, время меня поджимает. поэтому и решил сюда обратиться.

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

спасибо, конечно за пример, но мне бы желательно ПХП, потмоу что в перле я дуб-дубом, впрочем как и в регексах. Не прошу вылоджить код, просто поясните че и как оно работает. потому что кроме . * \1 я ниче не понял...

AiK
19.02.2005, 08:52
На русском ниче толкового не нашел
Издательство O'Reilly. Книга Mastering Regular Expressions. Перевод делали как минимум в издательстве Питер (http://www.piter.com)

Zvepr
19.02.2005, 12:56
мгм, спасибо, но strip_tags мне все таки больше понравилось )))