![]() |
Регулярные выражения [Beta-version]
Привет, все же эта статья не о моих мыслях, а о созданном до меня творении - регулярных выраженийх, то не буду копипастить "заводские" мануалы, а сразу перейду к делу. Регулярные выраженияКак всегда, материал для затравки: http://molody.tagiltelecom.ru/doc/program/www/php4/ru/reference.pcre.pattern.syntax.html и http://www.providerz.ru/articles/php/regexp-intro.html прочитали? ну хотябы просмотрели? тогда едем дальше :) PHP Разберу только пшп, ибо наиболее распространен, да и в перле все точно так же) Функции, которые работают с регулярками: preg_match - http://ru2.php.net/manual/en/function.preg-match.php PHP код:
PHP код:
PHP код:
preg_split -http://ru2.php.net/manual/en/function.preg-split.php - разбивает строку в соответствии с регулярным выражением и возвращает массив строк, как функция split() ( http://ru2.php.net/manual/en/function.split.php ): PHP код:
PHP код:
PHP - Иной взгляд Вот другой взгляд на то же, про что и я говорил :)http://www.providerz.ru/articles/php...-continue.html Правила хорошего тона: Комментируйте свои регулярки! ведь их наверняка нужно будет комментировать/изменять, поэтому совет: PHP код:
Зачем? фильтровать передаваемые скрипту значения, "сдирать" инфу с чужого сайта, да много еще как) ЗЫ: не спешите баянить, если что-то не понравилось... ИБО: не решился сразу переводить те 2 начальные статьи, ибо зачем? а щас появились сомнения. можт все же перевести на ВВ-теги форума? че сделать с теми статьями? "переварить", откомментировав каждые регулярки? ибо много где регулярки используются, а из-за отстуствия простой документации много вещей непонятны :) ЗЫ еще в тему: http://forum.antichat.ru/thread27498-%F0%E5%E3%F3%EB%FF%F0%ED%FB%E5.html жду камментов) |
Статья не знаю зачем :) Плюс блин поставил)
Вот этого хватит вполне http://php.spb.ru/php/regexp.html |
Элементарные действия
Является ли строка числом, длиной до 77 цифр: PHP код:
PHP код:
PHP код:
Есть ли в строке идущие подряд символы, не менее 3-х символов подряд (типа "абвгДДДеё", но не "ааббаабб"): PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
|
Даж не знаю... помоему для азов - статья слишком простая. Имхо, лучше было бы написать статью про крутые регулярки, а не про элементарные. Что-то из серии ББ кодов с хорошими фильтрами, чтоб народ учился их сам писать. Ну или там с модификатором /e.
Еще не заметл жирную надпись в самом начале "для простого поиска/замены" используется strpos и str_replace а не регулярки!!!".=)) Многие, познав такую вещь как regexp начинают ей злоупотреблять почем зря =\ UPD только сейчас заметил: "можт все же перевести на ВВ-теги форума?" - думаю надо. Большинство людей для других целей их и не использует. А безопасность BBкодов + там фильтрация на вложенные 2ые, и 3ые тэги - вообще сама по себе интересная тема, если осилишь :) |
ок, щас распознавалку бб кодов распишу подробно (самописка)
---добавлено--- Почемуто многие самописные сайты разрешают штмл в своей админке, уж не из-за того ли, что создателям "влом" писать распознавалку бб тегов? вот простейший пример: [php]<? // исходное сообщение: // ------------------------------------------------------ $str=' Памагите, ничаво не работает! Вот пример: [ph p ] // comment # comment phpinfo(); [/ph p] содран с: http://yandex.ru/ ляляля ляляля ПОМОГИТЕ!!! [ph p] for ($i=0; $i<100; $i++) { ping("-f","www.ru"); } [/ph p] [HIDE]тут хайд))) токо что в нем написать?[/HIDE] <? echo "<a href=http://php.spb.ru/chat/>click here!</a>"; phpinfo(); ?> '; // ------------------------------------------------------ // подавить предупреждения (в highlight_string есть глюки) error_reporting(0); // функция подсвечивания одного куска текста function _my_($s,$a1,$a2) { if ($a1!="<?") { $a1="<?"; $a2="?>"; } $s=str_replace("\\\"","\"",$s); ob_start(); highlight_string($a1.$s.$a2); $s=ob_get_contents(); ob_end_clean(); return $s; } // ищем в тексте все куски между <?... или PHP код:
PHP код:
PHP код:
Заметьте, срабатывают эти регулярки, только если if($_GET['member']==='1') - истинно (так мы упростили систему авторизации), если же это ложно, то вместо хайдов выводится: Код HTML:
<HR><b>Стань мембром! или не видать тебе хайдов и линков!!!</b><HR>PHP код:
PHP код:
а почему? дело в том, что вобла пользуется аналогичным алгоритмом, который я описал, ей наплевать на правильную "скобочную" последовательность! как например [p hp][p hp][/ph p][/ph p] такой код она сглотит как: [ph p][p hp][/p hp] и отдельно стоящий [/ph p]. плохо, правда? как же этого избежать? можно юзать правильно настроенные регулярки в отношении жадности, а можно пойти совсем другим алгоритмом, его я опишу лиш на словах, т.к. нормальную версию кодю уже недельку) суть, мы разбиваем сообщение на "части" учитывая правильные скобочные последовательности, и работаем с ними функциями, например, в теге пшп запрещены теги [b] и т.д. Но, почему же вбуллетин не использует это? да потому, что тогда полетит к черту вся система плагиноВ, точнее она не полетит, ее можно будет сделать, но уже только с помощью графов (более простого метода мне в голову пока не лезет :( ). а так каждый модуль, как например тег "оффтом" на аллчитс добавляет еще 1 регулярку. Тема очень обширная, поэтому если есть вопросы, пишите) да и от предложений тоже не откажусь)))) ЗЫ проблему с [php] решил, просто пробелов понавставлял))) |
Цитата:
)вот те статья - продвинутые реги http://www.intuit.ru/department/pl/plphp/class/free/13/5.html(мало, но тонкость, что приятно /сумеешь обмозговать и передать простым языком и со смешанными примерами - цены тебе не будет)) имхо, не вижу смысла описывать реги, и писать целую статью на тему. Материала уйма, и не так сложно найти понятное изложение.. ну да ладно, теперь на вопры по регам буду ссылку давать.. зы: репу зарабатываешь)) |
Цитата:
про репу: есть более простые методы, чем про регулярки рассказывать) если хочешь, покажу ))) |
да, забыл, спасибо за линк)
тогда уж получится хорошая подборка линков на мануалы) |
Цитата:
Talisman я там один пост выше апдейтил, может ты не заметил. Не рискнешь сделать статью про безопасные ББ коды? Т.е. показать как делать ББкоды максимально устойчивые к КСС (с хорошей фильтрацией вложенных тегов). Это конечно труд непосильный, тут тебе действительно цены не будет. Я бы даже присоединился/присоединюсь к разработке, если в армию не заберут в ближайшие два месяца ))) Сам давно этим вопросом занимаюсь. Конечно всегда есть ризон выдернуть класс для обработки ббкодов из того же vbulletin'a, но все таки желание изобрести велосипед так и прет в этом вопросе =\\ ЗЫ целесообразность в вопросе регулярок есть всегда, главное правильно это дело представить. Эта статья (фактически ликбез) все таки немного не то. Как сделать "то", не спрашивай )) |
| Время: 21:26 |