Comments 40
О неужели, наконец-то я окончательно в них разберусь, спасибо большое, в закладки.
+6
«Окончательно разобраться», в контексте регулярок, это — фантастика :)
+17
джеффри фридл с книгой «регулярные выражения» для этого предназначен
+3
Можно ли одной строкой регекспов выбрать из стандартного лога вебсервера IP, которые запрашивают только один URL и больше никаких? У меня не получается, делаю в два прохода.
+2
не уверен, но подумаю.
+1
если nix то эфективнее сделать конвеером
grep «my.cool.site.com/forum/advertisement/..... » access | egrep -o "^[0-9\.]{8,16}"
grep «my.cool.site.com/forum/advertisement/..... » access | egrep -o "^[0-9\.]{8,16}"
0
Можно сделать негативным просмотром вперед и назад, но будет нещадно тормозить.
Лучше брать список адресов и выкидывать повторяющиеся.
Плюс, если ловим ботов, то пара обращений в период ротации и адрес проскочит, а если фильтрануть по времени, то можно случайно зацепить нормального юзера.
Лучше брать список адресов и выкидывать повторяющиеся.
Плюс, если ловим ботов, то пара обращений в период ротации и адрес проскочит, а если фильтрануть по времени, то можно случайно зацепить нормального юзера.
+1
это я вно задача не для регулярок. точнее теоретически можно решить ими, но лучше не пробовать.
лучше за один проход по всему логу выберите уникальные IP + счетчик обращений к уникальным урлам, потом выкинте всех у кого урлов было больше одного. это потребует гораздо меньше мощностей чем танцевать с вокург ОГРОМНОГО лога с регулярками.
лучше за один проход по всему логу выберите уникальные IP + счетчик обращений к уникальным урлам, потом выкинте всех у кого урлов было больше одного. это потребует гораздо меньше мощностей чем танцевать с вокург ОГРОМНОГО лога с регулярками.
+1
Почитай в учебнике русского языка про ТСЯ/ТЬСЯ в глаголах
-15
UFO just landed and posted this here
Про жадность и производительность интересно.
вмемориз)
вмемориз)
+1
Wott, спасибо! Ты первый, кому удалось донести хоть немного понимания как работают регулярки в мою башку!
С нетерпением жду продолжения!
С нетерпением жду продолжения!
+2
А чем делались замеры?
0
На скриншотах — FF 3.5 c JS
labels = [
/id="run_test"/,
/id="\w+"/,
/id=".*test"/,
/id=".*.*test"/,
/id="[^t]*test"/,
/id=".{4}test"/,
/id=".*?test"/,
/id=".*u.*test"/
]
...
for (var j in labels) {
timeStart=new Date();
for(i=0;i<100000;i++) { str.search(labels[j]); }
timeEnd=new Date();
save_score(j,timeEnd.valueOf()-timeStart.valueOf());
}
* This source code was highlighted with Source Code Highlighter.
+1
а мне больше нравится Expresso, но он для .NET-овских регулярок и с Javascriptэовскими имеет очень мало общего.
в нем и профайлер есть, поэтому тестировать можно прямо во время написания :")
в нем и профайлер есть, поэтому тестировать можно прямо во время написания :")
0
JS имеет PCRE и четко прописан в стандарте.
Профайлер конечно хорошо, но без понятия что там наворотили в .NET.
Я в эклипсе пользуюсь плагином для Java.
Профайлер конечно хорошо, но без понятия что там наворотили в .NET.
Я в эклипсе пользуюсь плагином для Java.
0
Извеняюсь за оффтоп.
Кто-нибудь знает как написать рег. выражение которое находит все кавычки " кроме экранированных \".
/[^\\]?"/ тут по барабану на экранирование,
/[^\\]{1}"/ почти работает, но если 1й символ кавычка то ее не найдет :(
Кто-нибудь знает как написать рег. выражение которое находит все кавычки " кроме экранированных \".
/[^\\]?"/ тут по барабану на экранирование,
/[^\\]{1}"/ почти работает, но если 1й символ кавычка то ее не найдет :(
0
как-то неловко задача поставлена.
вместо того что написано можно использовать негативный просмотр назад /(?<!\\)"/, но сразу скажу что для \\" оно не сработает, хотя экранирован слэш. Что бы корректно отработать любое количество слэшей перед кавычками нужно просматривать вправо, что приводит нас к тому что условия задачи надо поменять.
вместо того что написано можно использовать негативный просмотр назад /(?<!\\)"/, но сразу скажу что для \\" оно не сработает, хотя экранирован слэш. Что бы корректно отработать любое количество слэшей перед кавычками нужно просматривать вправо, что приводит нас к тому что условия задачи надо поменять.
0
Автор, есть к Вам пара вопросов :)
1. [^\"] — это Вы от какой неоднозначности пытаетесь уйти? Точнее — с ЧЕМ совпадет это конструкция?
2. Вам штакетник /(https?:\/\/|ftp:\/\/(\w+(:.+?)?@)?)([-a-z0-9]+\.)+[a-z]{2,4}/ мозг не выворачивает?
Берете и m#((https?|ftp)://)?(\w+(:[^@]+)?@)?([-a-z0-9]+\.)+[a-z]{2,4}# его. Ну и правите мелкие промахи в плане.
1. [^\"] — это Вы от какой неоднозначности пытаетесь уйти? Точнее — с ЧЕМ совпадет это конструкция?
2. Вам штакетник /(https?:\/\/|ftp:\/\/(\w+(:.+?)?@)?)([-a-z0-9]+\.)+[a-z]{2,4}/ мозг не выворачивает?
Берете и m#((https?|ftp)://)?(\w+(:[^@]+)?@)?([-a-z0-9]+\.)+[a-z]{2,4}# его. Ну и правите мелкие промахи в плане.
0
1. Я вроде подробно описал.
Неоднозначность возникает если парсер не найдет простой кавычки и будет возвращаться обратно. Например в этом случае: "\" — строка не закрыта, выражение не должно на ней срабатывать.
Инструкция [^\"] совпадает со всем кроме \ и ". Кавычки экранированные покроются \. в выборе, также как и любые слеши, а неэкранированные — конец просмотра. Я не экранировал символы, что очевидно по абзацу.
2. Нет не выворачивает. И вообще при этом обычно скобки как (?: ) идут и так далее. Таковы уж регулярки.
К сожалению я все реже и реже пишу в перле, а другие языки таких конструкций не понимают. Иногда приходиться работать с двойным штакетником, поскольку в строке слеши приходиться экранировать дважды. А в некоторых нотациях все метасимволы идут со слешами и ничё! :)
Да пароль так лучше выглядит.
Неоднозначность возникает если парсер не найдет простой кавычки и будет возвращаться обратно. Например в этом случае: "\" — строка не закрыта, выражение не должно на ней срабатывать.
Инструкция [^\"] совпадает со всем кроме \ и ". Кавычки экранированные покроются \. в выборе, также как и любые слеши, а неэкранированные — конец просмотра. Я не экранировал символы, что очевидно по абзацу.
2. Нет не выворачивает. И вообще при этом обычно скобки как (?: ) идут и так далее. Таковы уж регулярки.
К сожалению я все реже и реже пишу в перле, а другие языки таких конструкций не понимают. Иногда приходиться работать с двойным штакетником, поскольку в строке слеши приходиться экранировать дважды. А в некоторых нотациях все метасимволы идут со слешами и ничё! :)
Да пароль так лучше выглядит.
0
Про тонкости multiline жду с нетерпением.
0
Спасибо за разъяснения. В качестве пожеланий — можно приводить чуть больше примеров из жизни, чтобы получился небольшой cook book? Хотя, возможно, это тема для отдельного поста.
0
Специфика регулярных выражений в том что они пишутся для конкретных случаев, поэтому собирать регулярки в некий Cook book чревато ошибочным применением. Для популярных применений типа полного URL или e-mail есть в сети корректные варианты, но они все равно нуждаются в коррекции для используемого диалекта.
0
UFO just landed and posted this here
Only those users with full accounts are able to leave comments. Log in, please.
Квантификаторы в регулярных выражениях