2 Stimmen

Regulärer Ausdruck in Java

Ich versuche, die folgenden Zeichenfolgen zu validieren:

org/com[2]/net[4]/uk@name  
org/com[2]/net[4]

Warum funktioniert der folgende reguläre Ausdruck nicht?

(((.*(\[.*?\])((\/)?)))|(\@(.*)))

Bitte um Hilfe.

2voto

aioobe Punkte 397211

Warum funktioniert der folgende reguläre Ausdruck nicht?

Ihr Ausdruck lässt sich wie folgt aufschlüsseln

  • (.*(\[.*?\])((\/)?)) , oder
  • (\@(.*))

Der erste Teil kann wie folgt unterteilt werden

  • .* gefolgt von
  • \[.*?\] (was nicht dasselbe ist wie (\[.*\])? ), möglicherweise gefolgt von
  • /

Hier ist ein weiterer Vorschlag:

String part = "[^/\\[\\]]+(\\[\\d*\\])?";
String pattern = String.format("%s(/%<s)*(@.*)?", part);

Testfälle:

String[] tests = {
        "org/com[2]/net[4]/uk@name",
        "org/com[2]/net[4]",
        "org/com[2/net",
        "org/com2]/net",
        "org/com[2]/net",
        "org/com[2]/net/",
        "org/com[2]/net@blah",
};

for (String test : tests)
    System.out.println(test + ": " + test.matches(pattern));

Salida:

org/com[2]/net[4]/uk@name: true
org/com[2]/net[4]: true
org/com[2/net: false
org/com2]/net: false
org/com[2]/net: true
org/com[2]/net/: false
org/com[2]/net@blah: true

1voto

Prince John Wesley Punkte 60530

Versuchen Sie dies.

    String s = "org/com[2]/net[4]/uk@name";
    System.out.println(s.matches("^\\w+/\\w+\\[\\d\\]/\\w+\\[\\d\\](/\\w+@\\w+)?$"));
    s = "org/com[2]/net[4]";
    System.out.println(s.matches("^\\w+/\\w+\\[\\d\\]/\\w+\\[\\d\\](/\\w+@\\w+)?$"));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X