Java Einfacher regulärer Ausdruck

Zweipunktnull

Commander
Registriert
Dez. 2004
Beiträge
2.546
Hallo,

um ohne viele Worte zu verlieren direkt auf den Punkt zu kommen: Warum gibt mir Java false und nicht true aus?

Code:
public class regex {
    public static void main(String[] args) {
        System.out.println("a0a0".matches("/\\A[a-z]\\d+[a-z]\\d+\\Z/i"));
    }
}

Ich interpretiere den Regex wie folgt:

Code:
/          \A                  [a-z]                \d+                    [a-z]                \d+                    \Z                /          i
Begrenzer, Anfang der Eingabe, genau ein Buchstabe, 1 - unendlich Ziffern, genau ein Buchstabe, 1 - unendlich Ziffern, Ende der Eingabe, Begrenzer, Option
 
Also ehrlich gesagt hab ich die Begrenzer \A und \Z bei Java-RegEx noch nicht gesehen (bzw verwendet...)
und auch die Begrenzer / hab ich am Anfang nie angegeben, /i am Ende hab ich nicht gebraucht...
was ist denn wenn du machst

Code:
        System.out.println("a0a0".matches("[a-z]\\d+[a-z]\\d+"));
?

und noch "extremer"
Code:
        System.out.println("a0a0".matches("[a-z][0-9]+[a-z][0-9]+"));
 
Die Begrenzer \A und \Z stimmen schon, sind ähnlich dem ^ und $, nur das sich \A und \Z auf den Anfang und das Ende des Strings beziehen, während sich ^ und $ explitzit auf den Anfang und das Ende einer Zeile (innerhalb des Strings) beziehen.

Aber dein Post hat mich auf die Idee gebracht, einfach die Regex-Begrenzer wegzulassen - und dann geht's auch. Es lag aber nicht an dem von mir gewählten Regex-Begrenzer /, sondern es funktioniert generell mit keinem. Das ist insofern nicht so gut, da ich mich jetzt frage, wo man Regex-Optionen unterbringt. Die stehen ja normalerweise hinter dem Regex-Begrenzer am Ende, also z.B.
#[a-z]*#i
Das Problem könnte man zwar einfach durch #[a-zA-Z]# lösen und so die Option i übergehen, aber prinzipiell muss es doch bestimmt auch in Java eine Möglichkeit geben, Optionen anzugeben?

EDIT:

Tatsache, scheint wirklich nicht möglich zu sein:

The Java String class has several methods that allow you to perform an operation using a regular expression on that string in a minimal amount of code. The downside is that you cannot specify options such as "case insensitive" or "dot matches newline".
 
Zuletzt bearbeitet:
Da musst du eben die "größere" Regex-Variante verwenden (Pattern, Matcher). Beim compile des Pattern kannst du dann ne Bitmask der Optionen übergeben.
 
Zurück
Oben