Проблема в том, что вы используете Pattern.quote
при построении шаблона. Этот метод создает необработанную версию шаблона, которая будет соответствовать буквально. Другими словами
Pattern.compile(Pattern.quote(".*"))
Не будет соответствовать «любому входу», а буквально будет только входом, который состоит из точки и звездочки: .*
Просто удалите этот вызов и оставьте Pattern.compile("Groovy(.*?)$")
.
Пример выполнения
Вы также можете удалить экранирование $
в строке, так как оно не требуется. В строковом литерале последовательность \$
создает содержимое $
, которое аналогично использованию $
в первую очередь. Это тот контент , который используется движком регулярных выражений для определения значения шаблона. Так что если вы do хотите экранировать символ для механизма регулярных выражений , вам нужно экранировать его дважды
- для строки, поэтому строковый литерал
"\\$"
создает содержимое \$
- Для движка регулярных выражений, который будет использовать содержимое
\$
и определит, что это литерал $
, а не специальный символ конца строки.
Кроме того, как отметил в комментарии Wiktor Stribiżew , нет необходимости для ?
вызывать ленивое сопоставление. Использование Pattern.compile("Groovy(.*)")
будет достаточно.