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

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

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

Post by 2useven10 »

Насколько я понимаю, сейчас в редакторе при замене с регулярными выражениями в строке замены $123 всегда считается группой номер 123, и без именованной группы получить из этого группу номер 1 + 23 или группу номер 12 + 3 нельзя.
${1}23 или ${12}3 не прокатывают, ${xxx} всегда ищет именованную группу, даже если xxx это только цифры.
Собственно вопрос/предложение -- почему бы не считать ${\d+} именно номером группы а не именованной группой с именем из цифр?
Last edited by HaRT on Mon 03 Nov, 2025 21:51, edited 2 times in total.
Reason: Тема отделена и перенесена
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: Sun 02 Nov, 2025 22:32 номером группы а не именованной группой с именем из цифр?
Возможно, стоило бы для совместимости сначала проверять наличие именованной группы, а уж если таковой нет, тогда брать нумерованную.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

HaRT, Так ещё лучше, совместимость это +
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

И если считать что у нас Perl Compatible REgex, то в perl ${1}23 и ${12}3 это именно группы номер 1 и 12 с хвостами.
А имя группы из цифр это ошибка. Т.е. (?<g1>\d+) -- ok, (?<1>\d+) -- ошибка
Last edited by 2useven10 on Sun 02 Nov, 2025 23:18, edited 4 times in total.
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

Ну и backreference в замене для именованной группы в perl будет $+{group_name}
Last edited by 2useven10 on Mon 03 Nov, 2025 04:43, edited 2 times 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 »

Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

HaRT, Всё правильно, это для замены.
В чистом виде в шаблоне поиска я вообще не уверен что backreference тут работает.
Даже именованная группа (?<name>pattern) как в perl не работает, надо (?{name}pattern)
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

Проверил...
Ни отрицательные ни именованные (как \{group_name} так и \g{...} \k<...>) backreference в шаблоне поиска не работают.
Работают только простейшие \1 \2 ... и именованные в виде \p{group_name}
Last edited by 2useven10 on Mon 03 Nov, 2025 12:58, edited 5 times in total.
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

Текущее поведение с $\d+ ничем не оправданно.
Явно ограничить вливание цифр в номер группы нельзя.
Реальных шаблонов у которых число групп больше 9 не так много, про 19..99 и говорить нечего.
Даже ограничение всегда одной цифрой было бы гораздо более осмысленно.
Last edited by 2useven10 on Mon 03 Nov, 2025 13:08, edited 1 time in total.
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

Ну раз возражений нет -- 6581
\{group_number} в шаблоне поиска
${group_number} в замене (если ${group_name} с числовым именем не найден)
Last edited by 2useven10 on Mon 10 Nov, 2025 22:10, edited 2 times 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 20:09 Ну раз возражений нет -- 6581
Эта функциональность интегрирована в far:regex? Если ещё нет, то получаются неприятные несоответствия…
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6225
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 42 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Для информации об именованных группах в .NET регулярках, к Фару не имеет прямого отношения.
Примерно так: имена именованных групп не могут содержать пунктуацию и не могут начинаться с цифры.
Иными словами там $123 - это номер группы, а не имя.
https://learn.microsoft.com/en-us/dotne ... xpressions
User avatar
HaRT
Moderator
Posts: 11458
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

NightRoman wrote: Mon 03 Nov, 2025 20:18 имена именованных групп не могут содержать пунктуацию и не могут начинаться с цифры
В perl'е требования похожие:
Perl regular expressions: Capture groups wrote:name must not begin with a number, nor contain hyphens.
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

HaRT, Не проверял, но вроде бы должно там появиться без дополнительных телодвижений.
2useven10
Posts: 5498
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 353 times

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

Post by 2useven10 »

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.
Post Reply

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