Page 23 of 28
Posted: Sun Nov 02, 2014 2:26 pm
by Skif_off
В текущей реализации регэкспов есть аналог модификатор (?m)?
Posted: Sun Nov 02, 2014 3:18 pm
by LonerD
Infocatcher
Спасибо. Работает.
А можно через регулярные выражения удалить строки через одну?
У меня фантазии хватило только на поиск ^(.*)$\n^(.*)$\n и замены на $1\n . Разумеется, не работает.
Posted: Sun Nov 02, 2014 4:13 pm
by Infocatcher
LonerD wrote:А можно через регулярные выражения удалить строки через одну?
Удалить четные:
^([^\n]*\n)([^\n]*\n?) =>
\1
Удалить нечетные:
^([^\n]*\n)([^\n]*\n?) =>
\2
Posted: Sun Nov 02, 2014 6:59 pm
by Instructor
Skif_off wrote:В текущей реализации регэкспов есть аналог модификатор (?m)?
Да, см.
AkelHelp-Rus.htm.
Posted: Sun Nov 02, 2014 11:33 pm
by LonerD
Infocatcher
Спасибо.
Заменил несколько скриптов одним Multi_SR.js
По аналогии сделал
Дубль строк в виде [112233]
([^\n]*\n)([^\n]*\n?) =>
$1$1$2$2
А вот Дубль строк в виде [123123] что-то не получается.
Поискал, не смог найти - можно ли регулярными выражениями изменить порядок выделенных символов на обратный в пределах одной строки (а при наличии выделения в нескольких строках - обработать их по отдельности)?
Posted: Mon Nov 03, 2014 4:21 am
by YuS
LonerD wrote:
По аналогии сделал
Дубль строк в виде [112233]
([^\n]*\n)([^\n]*\n?) => $1$1$2$2
А вот Дубль строк в виде [123123] что-то не получается.
Так это две совершенно разные задачи... в смысле вопрос был неточно составлен. Удалить четные/нечетные строки - одна задача, удалить дубликаты строк - совсем другая.
Дубликаты удаляются как-то так:
Code: Select all
Wath: (^[^\n]*\n)(.*)\1
With: \1\2
правда с некоторыми условностями:
1. Последняя строка в тексте не имеет \n, поэтому либо искусственно \Z (eof) переносим в следующую, пустую строку, либо составляем немного другую регулярку...
2. Т.к. некоторые дубликаты строк могут попасть в захватываемую часть \2, то поиск/замену придется осуществлять в несколько проходов.
LonerD wrote:
Поискал, не смог найти - можно ли регулярными выражениями изменить порядок выделенных символов на обратный в пределах одной строки (а при наличии выделения в нескольких строках - обработать их по отдельности)?
Строго говоря, извращенным способом это можно сделать, но... уж очень некрасиво и ресурсоемко, например, для первых 1-15 символов в строке:
Code: Select all
Wath: ^([^\n])([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)([^\n]?+)
With: \15\14\13\12\11\10\9\8\7\6\5\4\3\2\1
а для замены в любом месте, в том числе и в выделенной части нескольких строк, просто убираем символ начала строки и увеличиваем количество символов в выборке групп и их замену до необходимого...
в общем - маразм. Лучше использовать замену на функцию в SearchReplace.js
Posted: Wed Dec 03, 2014 1:05 am
by Skif_off
Непонятное поведение с модификатором (?m) в 4.9.0 и 4.9.1 dev:
отсюда и ниже. Так понял, в примере
выражение
(?m)^.*$ найдёт text1, а
(?-m)^.*$ - всё. Или неправильно понял? В 4.8.9, кажется, получается так.
Заодно такой вопрос по другому модификатору возник: (?-s) касается только переноса строки \n или в т.ч. и возврата каретки \r? В справке
новая строка, не совсем понятно.
Posted: Wed Dec 03, 2014 5:59 am
by Instructor
Skif_off wrote:Так понял, в примере
выражение
(?m)^.*$ найдёт text1, а
(?-m)^.*$ - всё. Или неправильно понял?
(?m) указывать не нужно, т.к. он итак включен по умолчанию (см. AkelHelp-Rus.htm). Как уже было сказано неоднократно: с версии 4.9.0 квантификаторы регулярных выражений обладают классической жадностью, поэтому
^.*?$
Заодно такой вопрос по другому модификатору возник: (?-s) касается только переноса строки \n или в т.ч. и возврата каретки \r? В справке новая строка, не совсем понятно.
Любая новая строка.
Posted: Sun Dec 21, 2014 2:24 am
by Skif_off
Instructor
Так и задумывалось?
Posted: Sun Dec 21, 2014 9:08 am
by YuS
Skif_off wrote:Instructor
Так и задумывалось?
Может быть, задумывалось и не так, но в том случае, не совсем корректное регулярное выражение применяется, хоть и синтаксически верное. Два выражения для захвата неопределенного количества символа, причем стоящих рядом, в итоге обрабатываются корректно. Правда итог не такой, который был нужен составителю, но выход ведь есть - либо супержадный, либо ленивый квантификатор, т.е. в одном из шаблонов необходимо конкретно указать приоритет и тогда результат будет более ожидаемым.
Posted: Sat Dec 27, 2014 6:34 pm
by Instructor
Skif_off wrote:Так и задумывалось?
В разрабатываемой версии файла помощи используется:
AkelHelp-Rus.htm wrote:TabNameFind=(.{20}).{3,}(?:\.([^.]*))?
TabNameRep=\1...\2
Posted: Sat Dec 27, 2014 7:51 pm
by YuS
Instructor wrote:
Code: Select all
TabNameFind=(.{20}).{3,}(?:\.([^.]*))?
TabNameRep=\1...\2
Будет ли отображаться расширение в файлах с именами:
1234567890123456789.txt
12345678901234567890.txt
123456789012345678901.txt
1234567890123456789012.txt
?
Posted: Sat Dec 27, 2014 11:56 pm
by Skif_off
Instructor
Да, спасибо, почти сразу после коммита увидел и поставил.
YuS
У меня отображалось, пока не вспомнил, что в конфиге стоит
TabNameFind=(.{25}) 
)
Ваше предложение?
Пока сделал так
Code: Select all
TabNameFind=(.{25}).*(?:\.([^.]*))?
вроде работает.
Posted: Sun Dec 28, 2014 11:36 am
by YuS
Skif_off wrote:
Ваше предложение?
Пока сделал так
Code: Select all
TabNameFind=(.{25}).*(?:\.([^.]*))?
вроде работает.
Ввиду того, что расширение тоже не ограничено количеством символов, то:
Code: Select all
TabNameFind=(?(^[^\n]{15,})([^.\n]{1,5}+)([^\n](?!\.[^.\n]+$))*+(.\.[^.\n]{1,4}+)?+([^\n]*?))
TabNameRep=\1...\3
Возможно, что шаблон можно и оптимизировать, но накидал его когда-то на коленке и то, что мне было необходимо вполне заработало, поэтому оптимизацией заниматься не стал:
1. мне было необходимо, чтобы последний символ перед расширением обязательно отображался
2. расширение отображается не более 4 символов, остальное отрезается.
3. файлы с наименованием вместе с расширением менее 15 символов, не сокращаются.
Posted: Tue Mar 03, 2015 7:57 pm
by Skif_off
Instructor
Возможно ли прикрутить к движку регэкспов поддерку \K, как в PCRE? Подозреваю, можно решить задачу с помощью (?=шаблон) или (?<=шаблон), но очень уж интересная штука...