Замена в редакторе: использование именованных/нумерованных групп

Хотите говорить о Far и не знаете, куда обратиться?
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Встроенные редактор и просмотрщик — поиск и замена

Post by 2useven10 »

Latest post of the previous page:

NightRoman wrote: Mon 03 Nov, 2025 20:18 имена именованных групп не могут...
Да как и в perl, уже упоминали, но здесь я ничего не менял - имя может состоять из цифр (совместимость со старой версией).
$123 номер группы, ничего не изменилось
${123} -- имя группы, если найдена, иначе номер группы
Last edited by 2useven10 on Mon 03 Nov, 2025 21:01, edited 3 times in total.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Встроенные редактор и просмотрщик — поиск и замена

Post by 2useven10 »

Пока возился, похоже нашёл баг
$$1 в замене разворачивается в "$" + "первая_группа", а надо просто "$" + "1"
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Встроенные редактор и просмотрщик — поиск и замена

Post by 2useven10 »

Похоже $$ вообще не отрабатывается.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Встроенные редактор и просмотрщик — поиск и замена

Post by HaRT »

2useven10 wrote: Mon 03 Nov, 2025 21:32 Похоже $$ вообще не отрабатывается.
На мой взгляд, в выражении замены неэкранированный $, за которым не идёт имя/номер группы (возможно, в фигурных скобках), не должен приниматься и при попытке ввода через диалог должен приводить к показу сообщения об ошибке (желательно, конкретного и подробного), а при использовании через API — к возврату ошибки (желательно тоже с понятной диагностикой).
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

6582 -- $$ отрабатывается
HaRT wrote: Mon 03 Nov, 2025 21:47 неэкранированный $, за которым не идёт имя/номер группы не должен
В общем согласен, в perl это с большой вероятностью ссылка на другую переменную, здесь их нет и пока остаётся голый $.
Через API (RegExpControl) диагностика к сожалению не передаётся.
Внутри farmanager она получается через обработку исключений, механизма передачи диагностики в API нет.
Last edited by 2useven10 on Mon 03 Nov, 2025 22:24, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Замена в редакторе: использование именованных/нумерованных групп

Post by HaRT »

2useven10 wrote: Mon 03 Nov, 2025 22:24 6582 -- $$ отрабатывается
Так и как же в итоге оно обрабатывается-то?
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

$$ -> $
$\d+ -- номер группы
${...} -- имя или номер группы
$xxx -- $xxx
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Замена в редакторе: использование именованных/нумерованных групп

Post by HaRT »

2useven10 wrote: Mon 03 Nov, 2025 22:46$$ -> $
А смысл? Люди привыкнут, и потом это будет не выпилить. Есть же \ для экранирования.
Хм, только что-то бэкслэш там не экранирует ничего…
Last edited by HaRT on Mon 03 Nov, 2025 22:53, edited 1 time in total.
Reason: Добавлена вторая строка
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

Вообще $$ это один из способов экранирования.
Но сейчас попробовал в perl - не сработал, а \$ работает.
Так что наверное переделаю, \ в замене вообще сейчас ничего не экранирует, кода будет немного больше.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

И, кстати, замена в API RegExpControl отсутствует.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

2useven10 wrote: Mon 03 Nov, 2025 23:02 наверное переделаю
Сейчас \ в замене можно писать 'как есть', если его сделать экранирующим придётся всегда дублировать.
Подожду пока других отзывов.
Last edited by 2useven10 on Mon 03 Nov, 2025 23:14, edited 3 times in total.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

Если делать \ экранирующим, тогда можно и backreference через него сделать, зачем использовать 2 символа для экранирования?
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

Замена в редакторе: использование именованных/нумерованных групп

Post by HaRT »

2useven10 wrote: Mon 03 Nov, 2025 23:04 замена в API RegExpControl отсутствует
Зато присутствует в Macro API: mf.replace. Правда, что-то мне не удалось там быстро задействовать регэкспы.
2useven10 wrote: Mon 03 Nov, 2025 23:19 Если делать \ экранирующим, тогда можно и backreference через него сделать, зачем использовать 2 символа для экранирования?
Исключительно для совместимости с Perl/RESearch/подставьте-своё. (Речь исключительно про выражение замены, поскольку в выражении поиска и так через \.)
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

HaRT wrote: Mon 03 Nov, 2025 23:22подставьте-своё
PCRE / PCRE2 в замене:
$$ insert a dollar character $n or ${n} insert the contents of group n
Last edited by 2useven10 on Mon 03 Nov, 2025 23:58, edited 2 times in total.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

2useven10 wrote: Mon 03 Nov, 2025 22:24 Через API (RegExpControl) диагностика к сожалению не передаётся.
Неплохо бы исправить. Как минимум для компиляции регулярки нужно...
Можно сделать RECTL_COMPILEEX, на вход давать структуру

Code: Select all

RegExpCompile {
   const wchar_t *regex; // [in]
   const wchar_t *error; // [out]
   intptr_t    position; // [out]
};
Last edited by 2useven10 on Tue 04 Nov, 2025 10:27, edited 2 times in total.
2useven10
Posts: 5497
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

Замена в редакторе: использование именованных/нумерованных групп

Post by 2useven10 »

Хотя нет, лучше сделать GetLastError(...), тогда не только от компиляции можно будет получать диагностику.
Post Reply

Return to “Обсуждение Far Manager”