Регулярные выражения
- Author
- Message
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Хотелось бы в регулярных выражениях специальный символ, обозначающий "разделитель слов". (В общем случае, все пробельные символы и знаки препинания.)
Пробовал использовать выражение [^\b] для поиска любых символов, кроме разделителей, но оно с равным успехом находит и знаки препинания, и пробелы, и переносы строк...
Пробовал использовать выражение [^\b] для поиска любых символов, кроме разделителей, но оно с равным успехом находит и знаки препинания, и пробелы, и переносы строк...
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
[\W]DV wrote:Хотелось бы в регулярных выражениях специальный символ, обозначающий "разделитель слов". (В общем случае, все пробельные символы и знаки препинания.)
[\w]DV wrote:Пробовал использовать выражение [^\b] для поиска любых символов, кроме разделителей, но оно с равным успехом находит и знаки препинания, и пробелы, и переносы строк...
если я правильно понял, что требуется.
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
DV
а это уже похоже на баг, но если что, то даже с ним можно выкрутиться: надо всего навсего перечислить и кириллические буквы.
1. [^\wа-я]
2. [\wа-я]
Только не знаю поймёт ли акелпадовский regex парсер [а-я] по аналогии с [a-z], но если не поймёт - то надо просто перечислить каждую из букв алфавита.
а это уже похоже на баг, но если что, то даже с ним можно выкрутиться: надо всего навсего перечислить и кириллические буквы.
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
DV
AkelHistory-Rus.txt wrote:AkelPad 4.8.8 ()
--------------------------
Изменено: метасимвол \w - соответствует любому символу, составляющему слово (любому символу, который не является разделителем).
Изменено: метасимвол \W - соответствует любому символу, не составляющему слово (любому символу, который является разделителем).
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Поймет, я так делал для log.coder, кажется, в 4.8.5 (потом убрал, но помню, что работало).Drugmix wrote:Только не знаю поймёт ли акелпадовский regex парсер [а-я] по аналогии с [a-z]
Instructor
Не слишком радикально? В разных языках имена жестко детерминированы, теперь \w придется разворачивать гораздо чаще, чем добавлять кириллицу, например.
-
Offline
- Posts: 1161
- Joined: Sun Oct 20, 2013 11:44 am
Т.к. \W - это все, что перечислено в Параметры/Редактор 2, а \w - все остальное?Instructor wrote:Изменено: метасимвол \w - соответствует любому символу, составляющему слово (любому символу, который не является разделителем).
Изменено: метасимвол \W - соответствует любому символу, не составляющему слово (любому символу, который является разделителем).
-
Offline
- Posts: 582
- Joined: Mon Apr 08, 2013 9:50 pm
- Location: Win7SP1x64, APx64
-
Offline
- Posts: 512
- Joined: Sun Sep 15, 2013 8:25 am
- Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы
Столкнулся с непонятным поведением движка регэкспов.
Регэксп:
в обратных ссылках игнорирует границы слова, либо их просто не захватывает шаблон группы. Тестовый массив:
- возможно так и должно быть, ибо встречалось такое поведение не только в движке регулярок AP. Например здесь.
Если использовать так:
то захватывает текст более ожидаемо.
Регэксп:
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
Если использовать так:
Code: Select all
(\b\w+\b)[^\n]*?\b\1\b
-
Offline
- Posts: 1250
- Joined: Thu Nov 16, 2006 11:53 am
- Location: Kyiv, Ukraine
Дабы не затерялось в теме по плагину Coder, продублирую обнаруженную проблему здесь:
viewtopic.php?t=1495&start=835
viewtopic.php?t=1495&start=835