This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-01-05
Channels
- # admin-announcements (183)
- # aws (30)
- # beginners (22)
- # boot (301)
- # cider (19)
- # cljs-dev (3)
- # cljsrn (23)
- # clojars (15)
- # clojure (136)
- # clojure-italy (8)
- # clojure-nl (4)
- # clojure-russia (19)
- # clojured (10)
- # clojurescript (134)
- # component (48)
- # cursive (7)
- # datavis (4)
- # datomic (50)
- # devcards (6)
- # events (9)
- # jobs (1)
- # ldnclj (10)
- # lein-figwheel (19)
- # leiningen (1)
- # luminus (16)
- # off-topic (5)
- # om (151)
- # proton (60)
- # re-frame (10)
- # reagent (25)
- # remote-jobs (1)
- # slack-help (3)
- # spacemacs (1)
- # vim (1)
А кто умеет на кложе регекспы композировать? Мне в голову только довольно дурацкий вариант пришел
(re-pattern (str "(" regex1 "|" regex2 ")"))
а прогнать по одному регэкспы так сильно медленнее будет чем если их скомпозить?
@rm типа того, выигрыш будет, если у тебя много одиночных выражений. У меня было порядка тысячи и это дало колоссальный прирост производительности (как минимум несколько сотен раз). Мне ещё нужно было определять номер сработавшего выражения, так что я использовал номер возвращенной группы. Тебе нужно каждое выражение брать в круглые скобки, если важен номер сработавшего выражения.
А вообще там производительность зависит от самих выражений, но, как правило, если n выражений собрать в одно, то можно считать, что будет в n раз быстрее (ну или около того, спец тестов не делал, только на одной конкретной задаче проверял и там это работало). Насколько я понимаю, Regex строит дерево из выражений и хорошей аналогией будет двоичный поиск - когда строка подана на вход, механизм regex не перебирает их линейно, а отбрасывает много вариантов на каждом новом символе.
Но с несколькими выражениями в одном Regex есть и проблемы: если у тебя на строке должно сработать сразу несколько выражений, то тут важно, является ли одно из них надмножеством другого и, если является, то ты получишь только одну группу из двух.
@abtv: спасибо за инфу, не знал
@artemyarulin: не за что, я некоторое время назад пилил своего рода regex'овый highload, много интересных вещей всплыло, а с этим вариантом нужно быть очень аккуратным и тестить все edge cases
@dottedmag: Production самый что ни на есть. А что за конкурс?
@dottedmag: Забавно, что парсинг почты был одной из задач, которые я решал 😄
abtv: спасибо за подробное объяснение. Я просто хотел как-то аннотировать регулярки. По твиттору гуляет какое-то конченное решение -- собирать регулярку чейном методов, я подумал, что должно быть лучше.
larhat: ну и переиспользовать тоже. В общем, местами можно и комменты, а местами придется в str конвертить
@rm так может тебе и не регулярки лучше подходят? грамматики лучше компоузятся, можно https://github.com/engelberg/instaparse пустить в дело