J’ai besoin de chercher des informations dans une chaîne de caractères.
Je viens de découvrir que Java propose, depuis la version 1.4, un support des expressions régulières très proche de la syntaxe de perl. Chouette !
Seulement voilà, je n’arrive pas à matcher un pattern sur ma chaîne. Pour que ce soit plus clair, j’ai une chaîne du type
O:01G:02D:(;;;;;)(;;;;;)S:(;;;;;)(;;;;;)(;;;;;)
dans les parenthèses, entre chaque ‘;’, il peut y avoir n’importe quoi. Mes champs sont délimités par O:, G:, D: et S:, il ne peut pas y avoir d’espaces. Enfin, chaque champs peut-être dans le désordre (le O: après le G:, etc.). Je précise, toutes ces conditions sont indépendantes de ma volonté, je ne peux pas les modifier, ou en rajouter, ou en supprimer.
Sur cette chaîne, je souhaiterais récupérer chaque valeur des champs. Par exemple, pour le champ O:, je voudrais récupérer la valeur 01, pour le champs G: la valeur 02, pour les champs D: et S: le contenu dans les parenthèses, parenthèses incluses.
J’ai donc, pour un test, fait un petit pattern pour matcher la valeur de O: :
String str = "O:01G:02D:(;;;;;)(;;;;;)S:(;;;;;)(;;;;;)(;;;;;)";
if( Pattern.matches( "^(O:.*)?(G:.*)?(D:.*\\(.*\\))?(S:.*\\(.*\\))?$", str ) ) {
Pattern p = Pattern.compile( "O:(.*?).:" );
Matcher m = p.matcher( str );
if( m.matches() )
System.out.println( str.substring( m.start(), m.end() ) );
}
Avec le pattern O:(.*?).:, sur un testeur d’expressions régulière en ligne (voir ici), j’obtient les valeurs O:01G: et 01. Mais avec Java, je n’ai rien du tout.
Quelqu’un aurait une solution à m’apporter ? Ou s’y connait en expressions régulières ? Merci par avance ^^