Pull to refresh

Comments 53

стиль регулярных выражений: PHP


Мне кажется, что стоит уточнить как минимум как на самом сайте: PHP -> PHP (PCRE), так как, например, лично я первым делом подумал про регэкспы из перла и sed'а.
Ну PCRE — это же Perl Compatible Regular Expression. Я perl не знаю, но подозреваю что синтаскис совместим =)
Совместим но не на 100%. И всё-таки PCRE — это не PHP, это PCRE. В PHP вообще три синтаксиса регулярных выражений: нерекомендуемый сейчас POSIX (ereg), Oniguruma (mb_ereg) и PCRE (preg).
Регэкспы в Perl реализованы не с помощью PCRE
«Из Перла и Седа»? Они там разные.
Я никого не обвинял конкретно :) Просто констатировал факт
Мне кажется, что логотип FedEx'а и стеб автора различит 99.9% жителей Хабры.
Это так, но заминусовали то зря человека :)
Ну капитанов тут не очень-то и любят
Для меня откровением было. Как-то никакого чувства узнавания не возникло.
На самом сайте, кстати, логотип гораздо симпатичней.
У меня, кстати, цветовая схема сассоциировалась (да простит меня Русский язык) с JetBrains PhpStrom'ом (:
Было бы совсем здорово, если бы этот сервис выдавал примеры строк, подходящих под регэксп.
А вообще, Regexper, имхо, нагляднее. Даже на примере с КДПВ (/h[a4@](([c<]((k)|(\|<)))|((k)|(\|<))|(x))\s+((d)|([t\+]h))[3ea4@]\s+p[l1][a4@]n[3e][t\+]/i — для ленивых)
Было бы совсем здорово, если бы этот сервис выдавал примеры строк, подходящих под регэксп.

Ох как не хватает когда начинаешь разбираться в чужом регэкспе. И приходится заново писать свой, а в итоге через часок мучений получался такой же, было такое. Увидев новость сразу понадеялся на эту фичу, но не тут то было :(
Есть вот такая штука:
bitbucket.org/leapfrogdevelopment/rstr/
У неё есть метод xeger(), которая умеет то, что вам надо. Насколько хорошо работает — не проверял. Думаю, что вокруг неё навернуть тривиальный web-интерфейс тоже не проблема.
Поиск строки подходящей под регэксп — NP-полная задача. Конечно, для большого подмножества регэкспов это сделать несложно и этого подмножества хватит за уши для регэкспов, попадающихся на практике.
А ведь Regexper (или Debuggex?) раньше такое умел. Безо всяких lookaround'ов (про это подмножество речь?) строку вообще поблочно можно построить, поправьте, если вру.
Да, lookaround'ы и бэкреференсы, насколько я знаю
К линку www добавьте, иначе облом. Спасибо за сервис. А так чтобы наоборот, составлять графы в выражение?
Есть такая интересная штука, как вербальные выражения: /^(http)(s)?(\:\/\/)(www\.)?([^\ ]*)$/ становится
var tester = VerEx()
            .startOfLine()
            .then( "http" )
            .maybe( "s" )
            .then( "://" )
            .maybe( "www." )
            .anythingBut( " " )
            .endOfLine();
Достаточно читаемо.
Я имел ввиду именно визуальный редактор, а не вербальный.
UFO just landed and posted this here
habrahabr.ru/post/192920/?reply_to=6701148#comment_6700856

С момента комментария успел чуть поэкспериментировать, вроде работает прилично, даже на регулярке для проверке емэйлов. Генерит правда такой ад, что страшно делается от осознания того, каким может быть адрес :-)
Да и просто раскрашенный регексп круто выглядит. Подумываю распечатать на цветном принтере и повесить над рабочим местом :-)
UFO just landed and posted this here
UFO just landed and posted this here
Недавно обнаружил www.debuggex.com/ — по-моему, самый лучший сервис. Представляет в визуальном виде регулярку и очень помогает в их написании.

UFO just landed and posted this here
Классная вещь, которая заодно позволяет вспомнить дискретку с её конечными автоматами.
UFO just landed and posted this here
UFO just landed and posted this here
Вот лучше бы Фридла почитали, чтобы вместо ужаса типа
(www\.[A-z\d\.\+\-]+) было что-то типа /(w{3}\.[-a-z\d+.]+)/i
А что быстрее работать будет «www» или w{3}? Что-то логика мне подсказывает, что второй вариант будет сопоставим по скорости только если библиотеку писали пряморукие люди.
Что-то мне подсказывает, что криворукие люди не напишут в продакшен машину регулярных выражений.

А что быстрее будет работать — честно говоря пофик, микрооптимизации меня никогда не интересовали.
Подумал. Второй вариант всегда будет чуть медленнее (опять же при допущении пряморуких), т.к. будет некоторый оверхед на разбор скобок и поиск выражения в них.

Это не камень в ваш огород, просто в данном, конкретном примере w{3} выглядит как раз, как некая микрооптимизация. Причем в данном случая я не могу понять ее смысл.
Скорее это выглядит как выпендрёж, т.к. во-первых «www» слегка читабельнее, чем w{3}, а во-вторых содержит меньше символов и даже набирается быстрее xD
А вот в том, что [A-z\d\.\+\-] — это ужас, meettya полностью прав, особенно «A-z» доставляет… хотя… вдруг это хитрая оптимизация чтобы захватить символы между Z и a :-)
Отличный сервис.
Чего не хватает:
— помощи по флагам, как например в указанном ранее www.debuggex.com/
— дебаггера как в RegexBuddy, что очень помогает отлаживать выражения, а главное оптимизировать по скорости (правда такого я онлайн пока не видел).
На regex101.com/ правило (поиск внутри кавычек):
(?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))
вылавливает только первое совпадение.

rubular.com/ и gskinner.com/RegExr/ находят все кавычковые блоки.
Sign up to leave a comment.

Articles