public class PatternTest {
public static void main(String[] args) {
System.out.println("117_117_0009v0_172_5738_5740".matches("^([0-9_]+v._.)"));
}
}
Ce programme imprime "faux". Quelle?!Quoi de neuf avec cette expression régulière ne correspond pas?
Je me attends à correspondre au préfixe de la chaîne: « 117_117_0009v0_1 »
Je sais ce genre de choses, vraiment que je fais ... mais pour la vie de moi, que je suis les yeux fixés sur ce pendant 20 minutes et j'ai essayé toutes les variations auxquelles je peux penser et il me manque évidemment quelque chose de simple et évident ici. En espérant que les nombreux yeux de SO puissent le choisir pour moi avant que je perde la tête à ce sujet.
Merci!
La version finale de travail a pris fin comme:
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());
}
Une découverte non évidente/rappel pour moi qui avant d'accéder à des groupes de matcher, l'un des matches() regarderLes() ou trouver() doit être appelé. Si ce n'est pas une exception IllegalStateException est lancée avec le message inutile "Match introuvable". Malgré cela, groupCount() retournera non-zéro, mais il ment. Ne le croyez pas.
J'ai oublié à quel point cette API est moche. Argh ...
il indique le nombre d'ensembles de parenthèses de capture présents dans l'expression rationnelle. Il ne dit rien de ce qui a été réellement apparié, bien que de nombreuses personnes l'interprètent de cette façon au début. –