Far 2.0 - regexp

Разработка Far.
User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Far 1.8 - regexp

Post by Andrey Budko »

Latest post of the previous page:

t-rex wrote:Вопрос тока что имено надо, "undo" поиска вперёд или настоящий поиск назад?
Ты имеешь в виду сначала найти все вхождения от начала до точки курсора, сохранить в список и потом последовательно выдавать по шифт-ф7 ничего больше не делая если условия не изменяются?
Denis
Posts: 1433
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 9 times
Been thanked: 4 times

Re: Far 1.8 - regexp

Post by Denis »

t-rex
найти самое последнее совпадение которое нашел бы поиск вперёд
Вроде такое невозможно без разворота re. Или я ошибаюсь?
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Denis
Это и есть поиск с конца и -1 каждый раз пока что то не нашли.
User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Far 1.8 - regexp

Post by Andrey Budko »

Denis wrote:Вроде такое невозможно без разворота re. Или я ошибаюсь?
сеч реплейс себе установи
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

Andrey Budko wrote:
t-rex wrote:Вопрос тока что имено надо, "undo" поиска вперёд или настоящий поиск назад?
Ты имеешь в виду сначала найти все вхождения от начала до точки курсора, сохранить в список и потом последовательно выдавать по шифт-ф7 ничего больше не делая если условия не изменяются?
Что то я тебя потерял.
Как мы тут выяснили определить поиск назад можно по разному:
1. Находить последнее что нашел бы поиск вперёд (как бы прокрутка фильма назад)
2. Именно искать назад (как будто бы в реверсированой строке), максимальное совпадение (т.е. делать тоже самое что делал бы поиск вперёд).
User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: Far 1.8 - regexp

Post by Andrey Budko »

t-rex wrote:Находить последнее что нашел бы поиск вперёд (как бы прокрутка фильма назад)
Я за этот вариант.
User avatar
John Doe
Бюрократ
Posts: 13063
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 41 times
Been thanked: 319 times

Re: Far 1.8 - regexp

Post by John Doe »

t-rex wrote:2. Именно искать назад (как будто бы в реверсированой строке), максимальное совпадение (т.е. делать тоже самое что делал бы поиск вперёд).
+1
https://t.me/FarManager — Telegram чат
User avatar
HaRT
Moderator
Posts: 9687
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 249 times

Re: Far 1.8 - regexp

Post by HaRT »

t-rex wrote:как не дели а искать надо искать во всех возможных под строках. Подумай над этим немного
Подумаю. Но нельзя ли какой-нибудь примерчик, где половинное деление не приведёт к правильному результату?
Centaur wrote:поиск назад должен находить те и только те же самые вхождения, что и поиск вперёд, только в обратном порядке
Я бы даже больше сказал: все те и только те, и именно в обратном порядке.
Andrey Budko wrote:
t-rex wrote:Находить последнее что нашел бы поиск вперёд (как бы прокрутка фильма назад)
Я за этот вариант.
Я тоже — он удобен, чтобы бегать по найденным вхождениям туда-сюда.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 9687
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 249 times

Re: Far 1.8 - regexp

Post by HaRT »

t-rex wrote:искать назад (как будто бы в реверсированой строке), максимальное совпадение
А можно практический пример, когда такое может понадобиться?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Tim Sobolev
Posts: 715
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Tim Sobolev »

t-rex wrote: 2. Именно искать назад (как будто бы в реверсированой строке), максимальное совпадение (т.е. делать тоже самое что делал бы поиск вперёд).
+1 за это
t-rex wrote: 1. Находить последнее что нашел бы поиск вперёд (как бы прокрутка фильма назад)
а это и все остальное регулировать "жадностью".
User avatar
Tim Sobolev
Posts: 715
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Tim Sobolev »

HaRT wrote:
t-rex wrote:искать назад (как будто бы в реверсированой строке), максимальное совпадение
А можно практический пример, когда такое может понадобиться?
Если мне не надо бегать туда-сюда, а точно знать, что поведение поиска назад точно такое же как и поиска вперед, а именно жадное. Например вырезать в логе последнюю запись со всеми предшедствующими ей переводами строк, а не только с самым последним предшедствующим переводом строки (пример с потолка).
User avatar
t-rex
Страшный и ужасный
Posts: 4907
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 6 times
Contact:

Re: Far 1.8 - regexp

Post by t-rex »

HaRT wrote:Подумаю. Но нельзя ли какой-нибудь примерчик, где половинное деление не приведёт к правильному результату?
Дело же не правильном или не правильном, а том что выйгрыша никакого нет и в том что чтоб работало надо псевдо половинное деление - т.е. ты ну ни как не можешь разделить строку на две части и искать в каждой по отдельности потому что часть искомого может быть в обоих половинках.

А насчёт поведения поиска назад, в поведение 2 можно получить поведение 1 как и сказал Тимур контролируя жадность.

А насчёт метода 1, мне вот тоже интересен пример когда он нужен - и не забудьте что пример должен быть с re с переменой длиной.
User avatar
HaRT
Moderator
Posts: 9687
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 249 times

Re: Far 1.8 - regexp

Post by HaRT »

=Tim Sobolev=
Но тогда получается, что для того, чтобы бегать взад-вперёд, потребуется менять регулярное выражение. На мой взгляд, это неприемлемо.

Вообще регулярные выражения предусматривают разбор вперёд по тексту, а поиск назад должен быть согласован с поиском вперёд. Зачем подменять понятия?!
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 9687
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 249 times

Re: Far 1.8 - regexp

Post by HaRT »

t-rex
Давай всё-таки отделим мухи от котлет.

Про корректность: при поиске назад не требуется искать в каждой половине. Алгоритм такой: взяли среднюю позицию, ищем от неё вперёд. Если нашли, то следующее начало поиска будет серединой правой части, если не нашли — значит левой. У меня есть ощущение, что я даже готов представить строгое доказательство корректности такого подхода. Но есть ли смысл тратить на него силы в условиях, когда до строгих рассуждений не снисходят?

Про эффективность: при сдвиге по одному символу назад делается в среднем N/2 поисков, при половинном же делении — logN. Разумеется, это не идентичные поиски, но для проигрыша логарифма нужны уж очень экзотичные входные данные. На достаточно же длинных “обычных” строках различие получится ощутимое.

Про жадность: я принципиально считаю, что поиск назад — это парная функция к поиску вперёд, и они должны быть согласованы. Т.е. чтобы найти “то же самое” в обратном направлении не должно требоваться менять строку поиска.

Про пример: уже который раз пишу: бегать по длинному файлу взад-вперёд, глядя, что вокруг найденных вхождений. Есть сомнения, что в таком применении могут понадобиться RE переменной длины?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
Tim Sobolev
Posts: 715
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 2 times

Re: Far 1.8 - regexp

Post by Tim Sobolev »

кокретно я хочу:
=Tim Sobolev= wrote:точно знать, что поведение поиска назад точно такое же как и поиска вперед, а именно жадное
-- т.е. точно знать что регулярка будет вести себя точно так же как при поиске вперед, а не вспоминать, каким должно быть последнее вхождение при поиске вперед этой же строки.
User avatar
HaRT
Moderator
Posts: 9687
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 124 times
Been thanked: 249 times

Re: Far 1.8 - regexp

Post by HaRT »

=Tim Sobolev=
Для регулярных выражений не определено понятие поиска назад, они умеют разбирать строку только вперёд (за исключением look-behind).

Вообще складывается впечатление, что обсуждение свелось к двум разным фичам, которые нужны разным людям:

1. Обратный поиск: находить все те и только те вхождения, что и прямой поиск, но в обратном порядке.
2. Поиск назад: искать по регулярному выражению от конца строки к её началу.

Если нет возражений против таких определений, давайте обсудим, почему бы не заложить в Фар обе эти фичи?

PS
Впрочем, поскольку S&R реализует обратный поиск, я не против того, чтобы в Фаре был поиск назад, разумеется, при условии, что S&R будет работать и в Фаре 1.8.
Фар есть инструмент, а не нянька. © 2009 DrKnS
Post Reply

Return to “Development”