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

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

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

Post by 2useven10 »

Latest post of the previous page:

Хотя нет, лучше сделать GetLastError(...), тогда не только от компиляции можно будет получать диагностику.
User avatar
HaRT
Moderator
Posts: 11359
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 260 times
Been thanked: 405 times

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

Post by HaRT »

2useven10 wrote: Tue 04 Nov, 2025 12:50 сделать GetLastError(...)
Тогда нужно не забыть аккуратно обойтись с многопоточностью. Например, чтобы этот самый last error поддерживался в каждом потоке отдельно.
А вообще какие у нас сейчас есть имеющиеся способы диагностики в FAR API? (Просто я его недостаточно хорошо знаю.)
Фар есть инструмент, а не нянька. © 2009 DrKnS
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

Теперь это RECTL_GETSTATUS.
Статус свой у каждого инстанса созданного RECTL_CREATE.
Просто не используйте один инстанс в нескольких потоках.
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

Ещё несколько моментов.
  1. (?<name>...) более стандартный вариант чем (?{name}...), как минимум надо добавить, можно ещё и (?'name'...)
  2. Относительные backreference \-n \{-n}, \-1 == старшая известная группа в текущей позиции
  3. \g{name} тоже более известен чем \p{name}, для совместимости опять же можно оба варианта принимать
  4. Вообще любые варианты backreference с g допустимы: \g1 \g{1} \g-1 \g{-1} \g{name}
    (можно ещё и $g{...}, но лучше $+{...} )
  5. \x.... где от 1 до 4 hex-цифр, можно дополнить \x{...}, цифр может быть больше чем 4, в этом случае надо делать суррогатную пару.
Last edited by 2useven10 on Mon 10 Nov, 2025 22:09, edited 3 times in total.
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

В старой дискуссии viewtopic.php?p=134283#p134283 Shmuel, зря продавил DrKnS.
Интеллект в определении количества цифр в \123 или \144 в номере группы - стандартное поведение perl. Если групп всего 5 -- надо считать оба варианта ссылкой на первую группу и двумя цифрами после этого.
Last edited by 2useven10 on Thu 06 Nov, 2025 14:53, edited 5 times in total.
Shmuel
Posts: 7108
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 47 times
Been thanked: 605 times

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

Post by Shmuel »

2useven10 wrote: Thu 06 Nov, 2025 11:27 Интеллект с определении сколько цифр в \123 или \144 используется в номере группы - стандартное поведение perl.
Не проверял perl, но даже если так, то это неправильно.

Представьте, что используется регулярное выражение поиска с 12 группами.
В выражении замены \13 (или $13, с perl не знаком).
Следовательно в замене будет использована группа 1 (т.к. 13 > 12).
Но вот регулярное выражение поиска расширили ещё одной группой, т.е. их стало 13.
Получите сюрприз - существующая замена сломалась, вместо 1-й группы стала браться 13-я.
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

Это наследие из тех времён когда \{n} (или \g{n}, ${n} ...) в perl не было.
Когда есть способ управлять границей явно это несущественно (не призываю сейчас восстанавливать интеллект). Но на момент дискуссии в far regex явного способа не было, платой за логичность/правильность была невозможность ограничить число цифр в номере группы.
Last edited by 2useven10 on Mon 10 Nov, 2025 22:07, edited 5 times in total.
Yegor
Posts: 1469
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 51 times
Been thanked: 84 times

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

Post by Yegor »

А почему бы вообще не перейти на какой-нибудь PCRE (из коробки)?
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

2useven10 wrote: Thu 06 Nov, 2025 11:22 Ещё несколько моментов.
6592, вроде всё упомянутое сделал.
Осталось понять - нужны ли \Escaped символы в замене?
И надо ли саму замену делать доступной через RegExpCpntrol?
В принципе замену можно делать и без этого (самостоятельно) - вся информация есть в результатах компиляции и мэтчинга.
Last edited by 2useven10 on Mon 10 Nov, 2025 12:47, edited 1 time in total.
2useven10
Posts: 5427
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 21 times
Been thanked: 349 times

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

Post by 2useven10 »

2useven10 wrote: Mon 10 Nov, 2025 03:50 6592, вроде всё упомянутое сделал.
Пришлось немного откатить изменения.
\{num/name} и \-n нельзя использовать для backreference,
они уже используются для экранирования '{' и '-' чтобы отключить quantifier {n[,m]} & range [b-e] режим.
Last edited by 2useven10 on Tue 11 Nov, 2025 02:03, edited 1 time in total.
Post Reply

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