java und reguläre ausdrücke

  • Themenstarter Themenstarter LatoGT
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
L

LatoGT

Gast
Moin,

ich verstehe das Ergebnis meines Javacodes nicht. Anhand von regulären Ausdrücken möchte ich ein Wort erkennen lassen: QA777. Das Ergebniss ist immer FALSE. Weshalb?

Pattern:
^Q = springt an den String-/Zeilenanfang wo Q steht
[^U] = dem Q darf alles folgen außer U
(\\d+\\.) = darauf folgt eine Ziffernfolge, die min. 1 Zeichen hat. Schließlich folgt ein Punkt
Warum muss vor \d noch ein \ stehen? Die gleiche Frage stellt sich zu ., wobei dort gleich \\ stehen.

Danke für die Hilfe!


Code:
import java.util.regex.*;

public class RE {

public static void main(String[] args) {

String pattern = "^Q[^U](\\d+\\.)";
String input = "QA777. ist der nächste Flug. Er ist pünktlich.";

Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(input);
boolean found = m.matches();

System.out.println(pattern + (found ? " passt auf " : " passt nicht auf ") + input);

}

}
 
"(?i)Q[^U]\\d+\\."

(?i) --> nur für case insensitive
in java muss \ immer verdoppelt werden (sogenanntes "escape" Zeichen)
Code:
       while(m.find()){
            System.out.println(m.group());
        }
oder du machst einfach noch .* hintendran
 
Dein Pattern passt nicht, weil nach dem Punkt in deinem String noch weitere Zeichen folgen.

Nimm folgendes Pattern stattdessen:

Code:
String pattern = "^Q[^U](\\d+\\.).*";

EDIT: Hups, zu spät.
 
Siehe Antwort zuvor:

Code:
String pattern = "^Q[^U](\\d+\\.).*";

Hier ist ja nun das .* ergänzt. Was hat das zur Bedeutung? Eigentlich doch, dass er alles matcht was mit Q beginnt gefolgt wird von Ziffern und *, also sonstigen Zeichen. Aber dann müsste er mir doch alles matchen, die ganze Zeile und nicht nur QA777.

Gruss LatoGT
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben