Регулярные выражения

Russian main discussion
  • Author
  • Message
Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

Instructor wrote:Видимо предполагается выделять "ab", но я не вижу практической пользы от этого. Для чего писать "ab+?", если тот же эффект будет, написав "ab"...
Ладно, другой пример:
строка: accccaabbbbbbbbb
шаблон: ab*?
совпадения: a, a, abbbbbbbbb (хотя последним по идее должно быть так же ab)

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

Instructor
в последней тестовой версии, правило

Code: Select all

0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
вешает AkelPad навсегда, при попытке напечатать/вставить следующий текст:

Code: Select all

"a"
Это правило используется в ahk.coder, поэтому если Вы решите тестовую версию akelpad'а продвинуть в стабильную ветку, то, пожалуйста, имейте в виду, что это правило будет вешать akelpad на практически каждом ahk-файле.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix wrote:Instructor
в последней тестовой версии, правило

Code: Select all

0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
вешает AkelPad навсегда, при попытке напечатать/вставить следующий текст...
Ну а если вот так?

Code: Select all

;0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
 0   `(")((?:[^"]*?(?:"")?)*?)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Instructor wrote: Теперь одинарная точка, например, ".*" или ".{5,10}" также жадная. Как работает жадность регулярных выражений AkelPad'а на примере:
- Шаблон "a.*b" в "aabbccaabbcc" соответствует "aabb" (но не "aabbccaabb").
Может быть поздновато уже, но разве жадность квантификатора данного шаблона, в приведенном примере, не должна выделять совпадение именно "aabbccaabb"? Иначе получается какая-то частичная жадность.

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

Да че-то непонятное опять получается: для aabb в этом примере по идее должен быть шаблон a+b+.
А так как описано - что тогда представляет из себя точка? Соседние символы вместо любого чтоли?

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

F. Phoenix wrote:(хотя последним по идее должно быть так же ab)
PCRE и JScript находят только "а".

YuS,F. Phoenix
Для чего обсуждать убранную реализацию?

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

Instructor wrote:PCRE и JScript находят только "а"
Ну, такое поведение я понимаю, но не "abbbbbbbbb" же: модификатор ленивости-то стоит.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Instructor wrote: YuS,F. Phoenix
Для чего обсуждать убранную реализацию?
Исключительно в целях повышения уровня самообразования. Знаний у меня маловато по этому вопросу, поэтому интересно ведь, почему была именно такая реализация "жадности".

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

F. Phoenix wrote:Ну, такое поведение я понимаю...
Тогда аналогичный ответ: для чего писать "ab*?", если тот же эффект будет, написав "a"...

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

opk44 wrote:Ну а если вот так?

Code: Select all

;0   `(")((?:[^"]*(?:"")?)*)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
 0   `(")((?:[^"]*?(?:"")?)*?)("(?!"))` `\1=(2,#ff0000,0) \2=(3,#00ff00,0) \3=(3,#ff0000,0)`
Спасибо, так работает хорошо.

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Instructor wrote:для чего писать "ab*?", если тот же эффект будет, написав "a"...
Имхо, тут вопрос не в целесообразности применения того или иного регекспа, а в "защите от дурака", т.е. если даже регулярка написана не совсем верно, то она, всё равно, должна выполняться буквально, как по учебнику.

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

YuS, да в целом хорошо конечно, когда регулярки работают строго по правилам: меньше путаницы. Но я так понял, Инструктор решил пойти путем максимизации производительности, и не растрачивать ее на формальности (уж не знаю, насколько в данном случае "защита от дурака" ее снизит).

На вышеуказанные случае как-то и правда пофигу. Но вот жадной точки не хватает. Да и вообще регулярки у Акела пока довольно слабые и неудобные - надеюсь, со временем это исправится, и, честно, рад, что хоть какое-то движение по этому поводу началось. :)

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

F. Phoenix wrote:Но я так понял, Инструктор решил пойти путем максимизации производительности, и не растрачивать ее на формальности (уж не знаю, насколько в данном случае "защита от дурака" ее снизит).
Чтобы мои слова не воспринялись неправильно: нет, я ведь не критикую и тем более, ничего не требую, скорее просто мысли вслух. В конечном итоге, это полное право автора, каким путем идти и как развивать программу, во всяком случае программу бесплатную. Огромное спасибо ему и на том, что есть, и что есть чем нам пользоваться!
F. Phoenix wrote: На вышеуказанные случае как-то и правда пофигу. Но вот жадной точки не хватает. Да и вообще регулярки у Акела пока довольно слабые и неудобные - надеюсь, со временем это исправится, и, честно, рад, что хоть какое-то движение по этому поводу началось. :)
Ну, не знаю... а в чем слабость? Неудобность - больше дело привычки, наверное. А то что не хватает жадной точки, так ведь в некоторых случаях это минус и он мешает, всё зависит от задачи... может быть, было бы неплохо, ввести сверхжадные квантификаторы (в том числе и для точки), т.е. при необходимости, чтобы всегда была возможность ими воспользоваться, ведь они позволяют найти максимально длинную строку, причем без замедляющих возвратов, т.е. по сути поиск должен ускоряться, а не замедляться.

Offline
Posts: 582
Joined: Mon Apr 08, 2013 9:50 pm
Location: Win7SP1x64, APx64

Post by Drugmix »

По-моему, все проблемы связанные с жадностью - исчезли бы, если была бы добавлена поддержка настройки U (ungreedy), которую можно было бы в шаблоне включать и отключать многократно, в нужных местах шаблона.

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

Drugmix wrote:По-моему, все проблемы связанные с жадностью - исчезли бы, если была бы добавлена поддержка настройки U (ungreedy), которую можно было бы в шаблоне включать и отключать многократно, в нужных местах шаблона.
1. У каждого есть право на собственное мнение.
2. Не вижу особых преимуществ у "U" перед уже имеющимся "?". Тем самым не понимаю, почему бы это введение еще одного регулятора нежадности могло вдруг решить "все проблемы связанные с жадностью".
Post Reply