public class PatternTest {
public static void main(String[] args) {
System.out.println("117_117_0009v0_172_5738_5740".matches("^([0-9_]+v._.)"));
}
}
Эта программа выводит «false». Что?! * * 1002
Я ожидаю совпадения с префиксом строки: "117_117_0009v0_1"
Я знаю эту штуку, правда, знаю ... но ради жизни я смотрел на это в течение 20 минут и перепробовал все варианты, которые только мог придумать, и мне явно не хватает чего-то простого и очевидного. здесь.
Надеясь, что многие глаза СО могут выбрать это для меня, прежде чем я сойду с ума по этому поводу.
Спасибо!
Окончательная рабочая версия выглядела так:
String text = "117_117_0009v0_172_5738_5740";
String regex = "[0-9_]+v._.";
Pattern p = Pattern.compile(regex);
Mather m = p.matcher(text);
if (m.lookingAt()) {
System.out.println(m.group());
}
Одним неочевидным открытием / напоминанием для меня было то, что перед доступом к группам совпадений необходимо вызвать одну из match () LookingAt () или find (). Если нет, возникает исключение IllegalStateException с бесполезным сообщением «Совпадение не найдено». Несмотря на это, groupCount () по-прежнему будет возвращать ненулевое значение, но это ложь. Не верьте этому.
Я забыл, насколько уродлив этот API. Argh ...