Шаблон содержит вложенные квантификаторы.\w+
находится внутри группы, которая сама количественно определяется с помощью +
, что затрудняет обработчику регулярных выражений обработку несоответствующих строк.Имеет больше смысла выделять класс символов из группы чередования, т.е. (\\w+|_|\\.|-)+
=> [\\w.-]+
.
Обратите внимание, что \w
уже соответствует _
.Кроме того, |
внутри класса символов соответствует буквальному символу |
, а [a|b]
соответствует a
, |
или b
, поэтому, похоже, вам следует удалить |
из вашего первого класса символов.
Использование
.compile("[a-zA-Z_]?[\\w.-]+(?:@\\d{4}-\\d{2}-\\d{2})?\\.yang")
Обратите внимание, что вы можете использовать группу без захвата ((?:...)
) вместо группы захвата, чтобы избежать ненужных дополнительных затрат, поскольку вы просто проверяетедля поиска и не извлечения подстрок.
См. демо regex (поскольку шаблон используется с matches()
и, следовательно, требует полного соответствия строк, я добавил ^
и $
в регулярном выражении демо).