Page 1 of 1

Non capturing regex (?:...)

Posted: 03.12.2025 20:37
by dimon40001
Поддерживаются ли незахватывающие группы (?:...)

В SynWrite редакторе подсвечивается ошибка. Но, возможно, будет работать в CudaText?

Делаю небольшой лексер для очередной ToDo-шки.

Задача выцеплять текст после точки (пробелы кратные 4 обозначил подчеркиваниями):
________DONE.text
________abc.text

Сейчас
(?<=^(\x20{4})*DONE\.).* работает.

(?<=^(\x20{4})*(DONE|abc)).*- не работает. (Т.к. look ahead / behind не поддерживает изменяемую длину. Т.е. нельзя внутри использовать 2 группы).

Я туплю, или есть решение элегантнее, чем объединять просто 2 длинных regexp через ИЛИ

((?<=^(\x20{4})*DONE).* | (?<=^(\x20{4})*abc).*)

Re: Non capturing regex (?:...)

Posted: 03.12.2025 20:57
by main Alexey
у нас два движка regex
- в лексерах. то же что и в лексерах SynWrite. там не работает тогда и тут тоже
- в диалоге поиска - там non-capturing grp вроде бы есть

Re: Non capturing regex (?:...)

Posted: 03.12.2025 21:01
by main Alexey
решение - обьединить через ИЛИ. или сделать два правила в лексере (еще медленнее видимо).