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

Russian main discussion
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

bayzhanov
Убедитесь, что у вас последняя версия редактора - 4.8.7 на текущий момент.

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

Post by DV »

Хотелось бы в регулярных выражениях специальный символ, обозначающий "разделитель слов". (В общем случае, все пробельные символы и знаки препинания.)
Пробовал использовать выражение [^\b] для поиска любых символов, кроме разделителей, но оно с равным успехом находит и знаки препинания, и пробелы, и переносы строк...

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

Post by Drugmix »

DV wrote:Хотелось бы в регулярных выражениях специальный символ, обозначающий "разделитель слов". (В общем случае, все пробельные символы и знаки препинания.)
[\W]
DV wrote:Пробовал использовать выражение [^\b] для поиска любых символов, кроме разделителей, но оно с равным успехом находит и знаки препинания, и пробелы, и переносы строк...
[\w]
если я правильно понял, что требуется.

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

Post by DV »

Drugmix
увы, нет, потому что [\W] и [\w] абсолютно не в курсе кириллицы, буквы которой вовсе не являются разделителями...

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

Post by Drugmix »

DV
а это уже похоже на баг, но если что, то даже с ним можно выкрутиться: надо всего навсего перечислить и кириллические буквы.
1. [^\wа-я]
2. [\wа-я]

Только не знаю поймёт ли акелпадовский regex парсер [а-я] по аналогии с [a-z], но если не поймёт - то надо просто перечислить каждую из букв алфавита.
Last edited by Drugmix on Wed Apr 02, 2014 2:57 pm, edited 1 time in total.

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

Post by Instructor »

DV
AkelHistory-Rus.txt wrote:AkelPad 4.8.8 ()
--------------------------
Изменено: метасимвол \w - соответствует любому символу, составляющему слово (любому символу, который не является разделителем).
Изменено: метасимвол \W - соответствует любому символу, не составляющему слово (любому символу, который является разделителем).

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

Post by Skif_off »

Drugmix wrote:Только не знаю поймёт ли акелпадовский regex парсер [а-я] по аналогии с [a-z]
Поймет, я так делал для log.coder, кажется, в 4.8.5 (потом убрал, но помню, что работало).

Instructor
Не слишком радикально? :) В разных языках имена жестко детерминированы, теперь \w придется разворачивать гораздо чаще, чем добавлять кириллицу, например.

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

Post by Serge Yolkin »

Для кириллицы ещё "ё" добавлять надо (вроде бы) - в диапазон [а-я] она входить не должна: [ёа-я]

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

Post by Skif_off »

Instructor wrote:Изменено: метасимвол \w - соответствует любому символу, составляющему слово (любому символу, который не является разделителем).
Изменено: метасимвол \W - соответствует любому символу, не составляющему слово (любому символу, который является разделителем).
Т.к. \W - это все, что перечислено в Параметры/Редактор 2, а \w - все остальное?

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

Post by Drugmix »

\d = цифры, \D = не цифры
\w = alphanumeric (цифры, буквы и _), \W = не alphanumeric
\s = whitespace chars ("пробельные" символы), \S = не whitespace chars
\b = word boundary (стык между \w и \W), \B = не word boundary

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

можно ли добавить модификатор (?-s) [выключает режим соответствия точки символам переноса строки и возврата каретки] чтобы для поиска внутри строк не надо было *в каждом месте* использовать подобные выражения:
[^\n\r]+?

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

Post by Instructor »

DrakonHaSh
Тестовая

Offline
Posts: 122
Joined: Sat Mar 19, 2011 10:20 pm

Post by DrakonHaSh »

Instructor wrote:DrakonHaSh
Тестовая
Спасибо!
на релизе 4.8.9 работает

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

Post by YuS »

Столкнулся с непонятным поведением движка регэкспов.
Регэксп:

Code: Select all

(\b\w+\b)[^\n]*?\1
в обратных ссылках игнорирует границы слова, либо их просто не захватывает шаблон группы. Тестовый массив:

Code: Select all

test test  test  test
test ttestt  test  etestt
ttestt test 
ttestt tttesttt
1test2 1test2 1test2 21test21
tetst tetst tetst
- возможно так и должно быть, ибо встречалось такое поведение не только в движке регулярок AP. Например здесь.
Если использовать так:

Code: Select all

(\b\w+\b)[^\n]*?\b\1\b
то захватывает текст более ожидаемо.

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

Post by DV »

Дабы не затерялось в теме по плагину Coder, продублирую обнаруженную проблему здесь:
viewtopic.php?t=1495&start=835
Post Reply