Помимо этого закрытого класса символов, в вашем текущем регулярном выражении, по-видимому, есть еще несколько проблем:
^([a-zA-Z\\-))((\\d+)\\.(\\d+)\\.(\\d+)).jar
Если ваше намерение состоит в том, чтобы просто совпадать, вам не нужно излишне группировать регулярное выражение и количество группировок.тяжелыйТакже вам не нужно экранировать -
, пока он находится внутри класса символов и присутствует либо в начале, либо в конце класса символов.Поскольку ваша строка имеет someLib
, что является более чем одним символом, следовательно, вам нужно иметь квантификатор с классом символов и вам нужно экранировать последнюю точку непосредственно перед jar
, иначе она может соответствовать любому символу, который может быть нежелателен.Правильное регулярное выражение, которое вы можете использовать, следующее:
^[a-zA-Z-]+\\d+\\.\\d+\\.\\d+\\.jar
Вот код Java,
String jarName = "someLib-1.2.3.jar";
String fileRegex = "^[a-zA-Z-]+\\d+\\.\\d+\\.\\d+\\.jar";
Pattern filePattern = Pattern.compile(fileRegex);
Matcher matcher = filePattern.matcher(jarName);
System.out.println(matcher.matches());
Это теперь печатает,
true
Также вы можетенапишите ваше регулярное выражение более компактно, как это, чтобы соответствовать данному тексту,
^[a-zA-Z]+-(\\d+\\.)+jar
, где [a-zA-Z]+
соответствует одному или нескольким алфавитам, -
соответствует дефису, (\\d+\\.)+
соответствует одной или нескольким цифрам, за которыми следует буквальныйточка и все это один или несколько раз, затем, наконец, jar
соответствует буквальному jar