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

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

Post by YuS »

Lenchik wrote:
YuS wrote:на regex101.com
Какие настройки на этом сайте надо вбивать справа (и/или сверху) от строки выражения, чтобы было почти эквивалентно акельпадным регулярным выражениям:
а) в coder файлах;
б) в строках поиска и searchandreplace.js?
Сомневаюсь, что полное совпадение получится, потому как в AP есть свои особенности реализации, как и в searchandreplace, но основное это:
или PCRE, или javascript c модификатором gmi
Причем для PCRE можно добавлять ещё и другие модификаторы - справа от поля ввода есть знак вопроса, при наведении на который появляется подсказка с расшифровкой о возможных модификаторах для конкретного диалекта.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Instructor wrote:В тестовой версии можно так:

Code: Select all

(['"])[^\1]*

Code: Select all

(['"])(?^\1)*
Забавно, но из двух предложенных форм записи первая (та, что с квадратными скобками) безопаснее: в случае некорректных регулярок первая просто не работает, вторая завешивает AkelPad... А в целом функционал полезный. Спасибо.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Ещё вопрос: а можно ли в условии (?<...) определить, что фрагменту предшествует фрагмент, ранее захваченный другим (или тем же самым) регулярным выражением?

Code: Select all

Текст:
aaabbb
cccbbb

RegExp1:
`^aaa`
Надо захватить bbb в первом (общем) случае, и не захватывать во втором.

DV
Offline
Posts: 1291
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Serge Yolkin wrote:в случае некорректных регулярок первая просто не работает, вторая завешивает AkelPad...
Приведите, пожалуйста, пример(ы) некорректных регулярок, которые завешивают AkelPad.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

DV

Code: Select all

`(?<=\s)(['"\u0060]?)((?^\1)*)(\1)(\s|$)`
для coder.coder файла. Файл открывается нормально, зависон происходит при прокрутке вниз. При использовании [^\1] не виснет.

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

Post by Instructor »

Serge Yolkin wrote:Ещё вопрос: а можно ли в условии (?<...) определить, что фрагменту предшествует фрагмент, ранее захваченный другим (или тем же самым) регулярным выражением?
Нет, если речь о QuotesRE, т.к. правило действует только внутри строки.
... зависон происходит при прокрутке вниз.
Тестовая

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Instructor
Я и имел в виду "внутри строки": начало строки уже подсвечено правилом ^aaa, можно ли подсветить в той же строке bbb только при условии, что перед bbb идет уже подсвеченый блок, а если не идёт - не подсвечивать.
С новой тестовой потестируюсь только завтра, сегодня, к сожалению, не смогу.
Last edited by Serge Yolkin on Fri Jan 10, 2014 5:41 pm, edited 1 time in total.

Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Instructor
Уронить тестовую не удалось. Старался. Снимаю шляпу.

В продолжение вопроса о границе ранее захваченного диапазона в той же строке: если это возможно, предложил бы новую сущность, например "\h" (по аналогии с "\b") - граница ранее захваченного диапазона (как другим правилом, так и одной из предыдущих итераций текущего). Резон: ^ и \b съедаются, если захвачены, т.е. после ^\d+ нельзя обратиться к ^ (?<=^....), так хоть к \h тогда... Ну, и \H для комплекта.

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

Post by Drugmix »

Instructor
а почему [^\n\r]+10 не находит "2014-01-10"?
Похоже, что + сейчас работает как ++, т.е. как ревнивая (или супержадная) квантификация.
Может стоит её реализовать отдельно?

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Drugmix
[^\n\r]+?10
or
[^\n]+?10

(\r is equivalent \n).

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

Post by Drugmix »

KDJ
neither works your variant.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Drugmix
RegExp:

Code: Select all

[^\n]+?10
Text:

Code: Select all

2014-01-04
2014-01-10
2014-01-12
2014-01-10
It works, matches only "2014-01-10".

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

Post by Drugmix »

KDJ
oh, I didn't notice the ? sign, sorry.
Yeah, it works.
ok, so
+ is ++
and +? is +
~can leave with that :)

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Drugmix
Read "AkelPad 4 - руководство пользователя" -> "Синтаксис регулярных выражений"
AkelHelp-Rus.htm wrote:- Квантификаторы регулярных выражений (*, +, {n,}) являются по умолчанию жадными (кроме одинарной точки, например, ".*" или ".{5,10}"). Чтобы сделать их нежадными (старый принцип), используется "?" после квантификатора, например, "\d*?".
- Жадные регулярные выражения AkelPad'а выполняются последовательно. Например, шаблон "ab?b" в "abc" не имеет совпадений, т.к. "ab?" соответствует "ab" и последующее "b" не имеет совпадений. Корректный шаблон, в данном случае, будет "abb?".

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

Post by Drugmix »

KDJ
yeah, sorry, it was too late when I realized I've asked a silly thing (that was also earlier discussed more than once).
Post Reply