Какой язык / реализацию / среду выполнения вы используете?
PCRE включает несколько именованных групп захвата с помощью модификатора режима (?J)
, но во многих реализациях (включая Perl) вы можетене используйте дублированные группы захвата , если они не являются частью отдельных альтернатив регулярному выражению.
т.е. в Perl и PHP: совпадение для следующего будет невозможно при попытке сопоставления "... ERROR"
:
/(?J)(?<type>INFO)?.*?(?<type>ERROR)?/
Это потому, что первая группа захвата "выигрывает" и остается пустой. (См. Ниже)
Однако ...
/(?J)(?<type>INFO|SEVERE)\b.*|.*\b(?<type>ERROR|WARN)/
будет работать
Я не совсем понялто, что вы пытались сопоставить, поэтому я не уверен, что вышеприведенные регулярные выражения каким-либо образом отражают то, что вы делаетеhttps://www.regular -expressions.info / named.html
... В Perl обратная ссылка сопоставляет текст, захваченный самой левой группой в регулярном выражении, с тем именем, которое соответствует чему-то .. .
Таким образом, в Perl и Ruby вы можете только осмысленно использовать группы с одинаковыми именами, если они находятся в отдельных альтернативах в регулярном выражении, так что только одна из групп с таким именем может когда-либо захватывать любой текст. Затем обратные ссылки на эту группу разумно соответствуют тексту, захваченному группой.