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

Russian main discussion
Post Reply
  • Author
  • Message
Offline
Posts: 294
Joined: Tue Jul 27, 2010 11:18 pm

Post by Serge Yolkin »

Skif_off wrote:Можете порекомендовать какой-нибудь из конструкторов регулярных выражений, максимально похожий на AkelPad?
Если "похожий" - в смысле результата, а не внешнего вида, то тут в пору прсить, чтобы Instructor плагин написал, использующий ту же реализацию. Кстати, а QSearch какую реализацию регулярок использует?

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

Post by DV »

Serge Yolkin wrote:Кстати, а QSearch какую реализацию регулярок использует?
Регулярки - акелпадовские.
QSearch-Rus.txt wrote:v.5.2 (Ноябрь 2012)
* продолжение 5.1
+ поиск с регулярными выражениями (используя их реализацию в AkelPad)

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

Post by Serge Yolkin »

DV
Ну, практически готовый, если не конструктор, то калькулятор регулярных выражений...

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

Post by YuS »

Планируется ли реализация поиска по условию:

Code: Select all

(?(?=если)то|иначе)
(?(n)то|иначе)
?
Иногда очень не хватает...

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

Post by Drugmix »

YuS
они же вроде уже реализованы? В справке посмотри (?=) и (?!), а также lookbehind'ы.

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

Post by YuS »

Drugmix wrote:YuS
они же вроде уже реализованы? В справке посмотри (?=) и (?!) (а также lookbehind'ы.
Это шаблоны, самые обычные шаблоны просмотра вперед/назад, а поиск по условию - немного другую функцию выполняет.

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

Post by YuS »

Infocatcher wrote: А вот поиск точки расширения с учетом того, что ее может не быть, у меня не заработал. Скажем,

Code: Select all

(?<=^.{12}).{2,}(?=\.[^\.]{1,9}$|.{9}$)
найдет не точку, а «.{9}$».
Работал бы поиск по условию, можно было бы как-то так организовать:
Что: (^[^\n.]{20})[^.]*(\.)?((?(2).{1,}|)$)
Чем: \1..\2\3

Это относительно вот этого вопроса:
как привести имя файла, например, LinesSelectCopyMoveDuplicate.js к виду LinesSelectCopy..js, ограничив максимальную длину пусть 20 символами и сохранив расширение (в т.ч. "не стандартные" 4 и более символов (типа .jpeg))?

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Здесь текст и регексп. Akel версии 4.8.6 dev (скачал сегодня по ссылке тестовая, от 21-го кажется). Ничего не находит. А должно. Проверял в других редакторах.

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

Post by Instructor »

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

Offline
Posts: 269
Joined: Mon Jun 20, 2011 8:33 am
Location: Электросталь

Post by yozhic »

Instructor
Спасибо, всё понял. Пошёл повторять матчасть.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

Прошу прощения, несколько затупил, подскажите, пожалуйста, как добавить к, например, такому выражению \\[a-z]*@[a-z]+ условие "но всего не менее 3х символов"?

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

Post by YuS »

Skif_off wrote:как добавить к, например, такому выражению \\[a-z]*@[a-z]+ условие "но всего не менее 3х символов"?
Если я правильно понял вопрос, то:

Code: Select all

\\[a-z]*@[a-z]{3,}
если же речь обо всем выражении целиком, то там и так должно быть, при самом минимуме совпадений, 3 символа:
"\@" - это два символа и "[a-z]+" - это, как минимум, 1 символ, т.е. итого 3

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

YuS
Речь о выражении целиком, торопился сформулировать мысль и написал первое пришедшее в голову число, пусть будет n.

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

Post by YuS »

Skif_off wrote:Речь о выражении целиком, торопился сформулировать мысль и написал первое пришедшее в голову число, пусть будет n.
Тогда на целое выражение сделать такое условие не получится, придется, всё же менять само выражение, как-то так:

Code: Select all

\\[a-z]*@[a-z]{n,}
ну, а если требуется необходимое количество именно по всем символьным классам (остальные символы ведь указаны жестко), то:

Code: Select all

\\[a-z]{n,}@[a-z]{n,}
если же применить подобное к целому выражению:

Code: Select all

(\\[a-z]*@[a-z]+){n,}
то получится, что выражение должно совпасть n раз и более.
Т.о., по заданному условию, это не совсем то, что хотели получить, значит необходимо оперировать указанием количества по каждому символу выражения или символьному классу.

Offline
Posts: 1161
Joined: Sun Oct 20, 2013 11:44 am

Post by Skif_off »

YuS

Code: Select all

\\[a-z]*@[a-z]{n,}
Тогда не захватится \xxx@x

Code: Select all

\\[a-z]{n,}@[a-z]{n,}
не захватится \@xxx
Суть уловил, спасибо за пояснения, заодно нашел недочет в подсветке LaTeX :)
Post Reply