Page 3 of 4

Posted: Tue Apr 10, 2012 11:16 pm
by Infocatcher
Instructor wrote:Почему конструкция "[\s\S]*" должна остановится на кавычке?
Не знаю. Но в js находит. :D
Вон даже на википедии примеры с <.*> что-то находят.
А у нас пока что вот такое.

Берем SearchReplace.js и некий текст, заканчивающийся на q.
[\s\S]*q – найдет весь текст
[\s\S]*?q – найдет весь текст до первой «q»

Posted: Wed Apr 11, 2012 5:32 am
by Infocatcher
Нечто про «почему» можно почитать тут: http://pcre.org/pcre.txt («THE STANDARD MATCHING ALGORITHM»), только форма изложения что-то не фонтан.

Posted: Wed Apr 11, 2012 5:42 am
by Instructor
Infocatcher
Конструкция по логике "[\s\S]*" это аналог ".*", но текущая реализация особо обрабатывает только ".*", но не "[\s\S]*".
Вон даже на википедии примеры с <.*> что-то находят.
".*" должен обрабатывается как положено.

Posted: Wed Apr 11, 2012 5:53 am
by Infocatcher
Instructor wrote:Конструкция по логике "[\s\S]*" это аналог ".*"
Вообще, .* не находит переводы строк.
Другое дело, что сейчас вообще ничего не находит переводы строк. :D
Вдобавок могут быть вариации с [^нечто]*

Кстати, .* работает не как положено, а как .*? :)

Posted: Wed Apr 11, 2012 6:02 am
by Infocatcher
Пожелание: к поддержке $1, $2, ... добавить $& для вставки при замене всей найденной подстроки.

Posted: Wed Apr 11, 2012 7:16 am
by FeyFre
Конструкция по логике "[\s\S]*" это аналог ".*", но текущая реализация особо обрабатывает только ".*", но не "[\s\S]*".
Как-то получается баговато. Идентичные регулярные выражения должни найти одинаковый текст. Хотя нужно уточнить насчет "сравниваемости" этих выражений, но должны считаться идентичными. Да и "жадность" какая-то неопределенная: то * жадная, то не жадная.

Posted: Wed Apr 11, 2012 7:44 am
by Infocatcher
Не работает нежадный поиск вида
.{3,}?

Находит всю строку вместо трех символов:
.{2,3}

Posted: Wed Apr 11, 2012 1:52 pm
by Instructor
FeyFre wrote:Как-то получается баговато...
Значит есть куда стремиться :)

Posted: Wed Apr 11, 2012 8:15 pm
by LEN
Перестал понимать что-либо!
Пытаюсь через Поиск и Замену добавить в конец всех строк свой текст:

Что: (.*)
Чем: $1_текст
[v] Регулярные выражения
(*) С начала

А вместо этого получаю:
$1_текст

Что я делаю не так?

Posted: Thu Apr 12, 2012 1:21 am
by Instructor
LEN
Сейчас при использовании регулярных выражений замена работает по всему тексту, а поиск построчный.

Posted: Thu Apr 12, 2012 8:35 pm
by LEN
Instructor

Писк-то находит, но почему не заменяет?

Posted: Fri Apr 13, 2012 10:41 pm
by Instructor
Infocatcher wrote:Кстати, .* работает не как положено, а как .*? :)
Если будет яснее, то как положено ... автором.
Пожелание: к поддержке $1, $2, ... добавить $& для вставки при замене всей найденной подстроки.
Реализовано. Помимо "$&", "$0" действует аналогичным образом.
Не работает нежадный поиск вида
.{3,}?
В текущей реализации нету разделения на нежадный/жадный. Конструкции ".*", ".{3,}" и т.п. всегда "нежадные".
Находит всю строку вместо трех символов:
.{2,3}
^\d -> -
срежет все цифры в начале текста, а должно только первую.
4. При замене не поддерживается запоминание содержимого скобок.
LEN wrote:Писк-то находит, но почему не заменяет?
Тестовая

Posted: Wed Apr 25, 2012 9:30 am
by Eugeny
Если в редакторе включён режим переноса длинных строк, то при замене "(.*)" на "$&_текст" происходит замена на каждой отображаемой строке, а не на каждой реальной.

Я так понял, замена происходит только для тех случаев, когда паттерн соответствует целой строке. Например замена паттерна "^.+=" на "$&_текст" не происходит, и не происходит вообще ничего, никакой реакции программы. Проверить можно на примере любого ini файла.

Posted: Thu May 03, 2012 6:24 pm
by Instructor
На sourceforge какие-то проблемы с сайтом - выпустить релиз пока не получается. Выкладываю текущую версию для проверки корректности работы с регулярными выражениями.

Два отличительных правила: поиск/замена построчные и поиск не жадный.

Тестовая

Posted: Fri May 04, 2012 5:39 am
by Infocatcher
Instructor wrote:для проверки корректности работы с регулярными выражениями.
Что: http
Чем: [$0]
Найти далее – Заменить – AkelPad
Описание
Неправильный путь приложения: %путь%\AkelPad.exe

Сигнатура проблемы
Имя проблемного события: APPCRASH
Имя приложения: AkelPad.exe
Версия приложения: 4.7.5.0
Отметка времени приложения: 4fa2c8e6
Имя модуля с ошибкой: AkelPad.exe
Версия модуля с ошибкой: 4.7.5.0
Отметка времени модуля с ошибкой: 4fa2c8e6
Код исключения: c0000005
Смещение исключения: 0002e4a9
Версия ОС: 6.1.7601.2.1.0.256.4
Код языка: 1049
Дополнительные сведения 1: 0a9e
Дополнительные сведения 2: 0a9e372d3b4ad19135b953a78882e789
Дополнительные сведения 3: 0a9e
Дополнительные сведения 4: 0a9e372d3b4ad19135b953a78882e789

Дополнительные сведения о проблеме
Код черпака: 2959763514


С «заменить все» не падает.