- 1
^[\s\u200c]+|[\s\u200c]+$
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+3
^[\s\u200c]+|[\s\u200c]+$
Стековерфло не могут в регулярные выражения или регулярные выражения не могут в простейшую задачу?
http://stackstatus.net/post/147710624694/outage-postmortem-july-20-2016
Питонобляди соснули.
Питон 2.6:
Жс на Chrome 51 (впрочем, в Firefox тоже тормозит):
А нахуя match и search я давно интересовался. К этому теперь fullmatch добавили, хоть что-то полезное.
А крышку с вопросиком низзя? И в чем великий сука смысл такой регулярки?
А в чём проблема? Для того компиляция и сделана, чтобы несколько раз можно было запускать без повторного парсинга и построения автомата...
> Убрать пробелы в начала и конце?
Да знаю я, знаю, что для этого достаточно strip. Но вот если сделать это регуляркой - получаем лагалище с квадратичной сложностью (хотя в том же пёрле всё мгновенно отрабатывает).
З.Ы. Или тебе не нравится буква a вместо пробела? Как нахуй разница то? Или тебе не нравится, что я левую половину регулярки отбросил, чтобы не переусложнять пример (один хуй лагает)?
В том что это можно сделать за один раз? Причем тут компиляция, она ленивая.
>Но вот если сделать это регуляркой - получаем лагалище с квадратичной сложностью
Не, ну если еще черезжопнее сделать, то можно еще и экспоненту получить, а так re.sub(r"^[\s\u200c]+", "", str) + re.sub(r"[\s\u200c]+$", "", str)
Ты лагаешь прост.
Так эта хуйня и лагает:До тебя никак не дойдёт?
re.sub("[\s\u200c]+$", "", " " + 'aaa' + ' '*20000)
Тут ничего не лагает.
re.sub("[\s\u200c]+$", "", " " + 'aaa' + ' '*20000+'a')
А если перевернуть - лагает:
Когда я лагал?
А не, нихуя. То бекреференс http://stackoverflow.com/questions/9011592/in-regular-expressions-what-is-a-backtracking-back-referencing
Не было бы бектрекинга, лагало бы оно так на жалких 20к символов?
А в данном случае — хреновый оптимизатор.
Конечный автомат же, блжад!
>хреновый оптимизатор
Его просто нет.
Конечный автомат же, блжад!
>хреновый оптимизатор
хреновый улучшатель же, блжад!
Оно?
в перле - регулярки часть синтаксиса языка, и структура регулярки (еще за долго до её компиляции) известна на стадии парсинга скрипта. на основе структуры можно уже и делать высокоуровневые оптимизации.
pcre тоже оптимизирует, и принижать то что народ там делает не стоит. но у перла все равно оптимизируется больше и глубже по простой причине - нужда. в языке функций для работы со строками просто кот наплакал. по дезайну все нужно делать регулярками. найти подстроку, вырезать подстроку, вставить подстроку, распарсить строку (sscanf/etc) - почти всегда приходится делать через регулярки, потому что альтернативы плачевны.
С какого перепоя? Брать регексп из переменной перл не умеет что ли?
Никто ничего не принижает, просто питон ищет тщательнее, значит, это должно что-то приносить, иначе бы это выпилили к хуям собачим или запилили бы альтернативный модуль.
и из переменных он тоже умеет. но перл так же поддерживает интерполяцию переменных - включая qr// переменные - и подмешивание перлового кода в регулярках. что бы это сделать, приходится регулярки парсить вместе с остальным кодом.
Подо мной уже лужа. Это всё, что я смог.
Если у тебя в коде их слишком много для тестирования каждой - это очень серьёзный повод задуматься.
regexpbuddy тебе в опмощь
Он автомат тирассирует
Скачай да попробуй
/0.
В студии можно померять интервал между двумя бряками (останавливаться на бряках естественно не надо)?
Так что если пробежаться несколько раз (пример же у нас есть, можем сколько угодно его гонять) с run to cursor, вполне можно прикинуть, в каком районе лаг.
Но аналогов в путхоне имхо нет, да и гонять задолбешься. Разве что двоичным поиском.
> Разве что двоичным поиском.
Ну я примерно так и искал лаг в нашем проекте. Довольно быстро нашлось. Так что вполне юзабельное время там показано.
кстати, профайлеры есть и для пист0на, зачаточные
Жирный вариант, правда, не очень.