Regex und .matches() geben keine Ausnahme

Nooobi

Mitglied
Hallo, ich bin noch so ziemlich ein Anfänger und verstehe wieso mein Code hier nicht funktionieren will.
Ich würde gerne eine IPv6-Adresse auf ihre gültigkeit überprüfen und wollte überprüfen ob in einem String, andere Symbole zwischen 0-9 und a-f existieren. Ich poste hier den Code.

Frage: Wieso sagt er "x" wäre ein gültiges Symbol?!

Ich würde mich über eine schnelle Antwort freuen, da Ich morgen eine Arbeit darüber schreibe :)

Code:

Java:
package Ipv6test;


public class IPTEST {
    // Main Methode
    public static void main(String[] args) {
        String IPv6Screen1 = "fe80:f3x:ACBA:0000:2341:CCBA:A278:04B1";
        String IPv6Screen = IPv6Screen1.toLowerCase();
        // Aufrufen von Methoden
        Check(IPv6Screen);
    }
    // Methode zum Abfragen ob der IPv6 String gültig ist
    public static void Check(String IPv6Screen) {
        String split[] = IPv6Screen.split(":", 8);
    
        // Check in Schleife
        for (String s : split) {
            if (s.length() > 4) {
                System.out.println(s + " Ist länger als 4 Zeichen -> Ungültig");
            } else {
             if (s.matches("[^0-9a-f]")) {
                    System.out.println(s + " Enthält ungültige Symbole -> Ungültig");
                } else {
                    System.out.println(s + " Enthält korrekte Symbole");
                }
            }
        }
    }
}


Ausgabe:

fe80 Enthält korrekte Symbole
f3x Enthält korrekte Symbole
acba Enthält korrekte Symbole
0000 Enthält korrekte Symbole
2341 Enthält korrekte Symbole
ccba Enthält korrekte Symbole
a278 Enthält korrekte Symbole
04b1 Enthält korrekte Symbole
 
Zuletzt bearbeitet:
Beste Antwort
String.matches prüft den ganzen String, also es entspricht unter dem Strich einem ^[^0-9a-f]$.

Du willst aber nicht prüfen, ob der ganze String dem Regulären Ausdruck entspricht sondern Du willst einfach nur wissen, ob so ein Element vorkommt. Also etwas wie .*([^0-9a-f])+.*.
Sprich: Es kann vorab beliebige Zeichen geben. Dann muss ein oder mehrere unzulässige Zeichen kommen und dann wieder beliebig viele andere Zeichen.

Edit: Die (...) kannst Du natürlich weg lassen. Das brauchst Du nur, wenn Du die ungültigen Zeichen über eine Gruppe auch haben möchtest. Ein .*[^0-9a-f]+.* reicht für deinen Code natürlich, da Du ja eh keinen Matcher hast.

temi

Top Contributor
Verwende bitte die Codetags (das </> Symbol im Editor).
Java:
public class IPTEST {
    // Main Methode
    public static void main(String[] args) {
        String IPv6Screen1 = "fe80:f3x:ACBA:0000:2341:CCBA:A278:04B1";
        String IPv6Screen = IPv6Screen1.toLowerCase();
        // Aufrufen von Methoden
        Check(IPv6Screen);
    }
    
    // Methode zum Abfragen ob der IPv6 String gültig ist
    public static void Check(String IPv6Screen) {
        String split[] = IPv6Screen.split(":", 8);

        // Check in Schleife
        for (String s : split) {
            if (s.length() > 4) {
                System.out.println(s + " Ist länger als 4 Zeichen -> Ungültig");
            } else {
                if (s.matches("[^0-9a-f]")) {
                    System.out.println(s + " Enthält ungültige Symbole -> Ungültig");
                } else {
                    System.out.println(s + " Enthält korrekte Symbole");
                }
            }
        }
    }
}
 

Nooobi

Mitglied
Verwende bitte die Codetags (das </> Symbol im Editor).
Java:
public class IPTEST {
    // Main Methode
    public static void main(String[] args) {
        String IPv6Screen1 = "fe80:f3x:ACBA:0000:2341:CCBA:A278:04B1";
        String IPv6Screen = IPv6Screen1.toLowerCase();
        // Aufrufen von Methoden
        Check(IPv6Screen);
    }
   
    // Methode zum Abfragen ob der IPv6 String gültig ist
    public static void Check(String IPv6Screen) {
        String split[] = IPv6Screen.split(":", 8);

        // Check in Schleife
        for (String s : split) {
            if (s.length() > 4) {
                System.out.println(s + " Ist länger als 4 Zeichen -> Ungültig");
            } else {
                if (s.matches("[^0-9a-f]")) {
                    System.out.println(s + " Enthält ungültige Symbole -> Ungültig");
                } else {
                    System.out.println(s + " Enthält korrekte Symbole");
                }
            }
        }
    }
}
Ups Ja, vielen dank. Ich habe es bearbeitet.
 

KonradN

Super-Moderator
Mitarbeiter
String.matches prüft den ganzen String, also es entspricht unter dem Strich einem ^[^0-9a-f]$.

Du willst aber nicht prüfen, ob der ganze String dem Regulären Ausdruck entspricht sondern Du willst einfach nur wissen, ob so ein Element vorkommt. Also etwas wie .*([^0-9a-f])+.*.
Sprich: Es kann vorab beliebige Zeichen geben. Dann muss ein oder mehrere unzulässige Zeichen kommen und dann wieder beliebig viele andere Zeichen.

Edit: Die (...) kannst Du natürlich weg lassen. Das brauchst Du nur, wenn Du die ungültigen Zeichen über eine Gruppe auch haben möchtest. Ein .*[^0-9a-f]+.* reicht für deinen Code natürlich, da Du ja eh keinen Matcher hast.
 
Beste Antwort

Nooobi

Mitglied
String.matches prüft den ganzen String, also es entspricht unter dem Strich einem ^[^0-9a-f]$.

Du willst aber nicht prüfen, ob der ganze String dem Regulären Ausdruck entspricht sondern Du willst einfach nur wissen, ob so ein Element vorkommt. Also etwas wie .*([^0-9a-f])+.*.
Sprich: Es kann vorab beliebige Zeichen geben. Dann muss ein oder mehrere unzulässige Zeichen kommen und dann wieder beliebig viele andere Zeichen.

Edit: Die (...) kannst Du natürlich weg lassen. Das brauchst Du nur, wenn Du die ungültigen Zeichen über eine Gruppe auch haben möchtest. Ein .*[^0-9a-f]+.* reicht für deinen Code natürlich, da Du ja eh keinen Matcher hast.
Vielen Dank! So funktioniert das :) Jetzt gibt er mir das richtig aus.
 

KonradN

Super-Moderator
Mitarbeiter
Der Ansatz war durchaus auch ok. Du musst Dann nur auch das ^ entfernen. Du kannst also statt nach ungültigen Zeichen auch sicherstellen, dass nur gültige Zeichen da sind. Da kann man dann auch die Länge mit prüfen (wenn es genau 4 Ziffern sein müssen aber ggf. sind auch weniger ok?):

Also ein regulärer Ausdruck [0-9a-f]+ stelt sicher, dass nur gültige Zeichen vorhanden sind. Falls jemand das mit RegEx Implementationen nutzt, die nicht den ganzen String prüfen, kann man das noch sicher stellen: ^[0-9a-f]+$

Und wenn man die Länger sicherstellen will:
^[0-9a-f]{1,4}$ für eine Länge von 1 - 4. (Kann man auch auf 0 setzen - dann wäre der leere String auch ok.
^[0-9a-f]{4}$ für eine Länge von genau 4.

Natürlich ist dann noch wichtig: Das if ist jetzt umgedreht. true bedeutete bisher bei Dir: Ungültig. Jetzt bedeutet ein true: gültig.
 

LimDul

Top Contributor
Der Ansatz war durchaus auch ok. Du musst Dann nur auch das ^ entfernen. Du kannst also statt nach ungültigen Zeichen auch sicherstellen, dass nur gültige Zeichen da sind. Da kann man dann auch die Länge mit prüfen (wenn es genau 4 Ziffern sein müssen aber ggf. sind auch weniger ok?):

Also ein regulärer Ausdruck [0-9a-f]+ stelt sicher, dass nur gültige Zeichen vorhanden sind. Falls jemand das mit RegEx Implementationen nutzt, die nicht den ganzen String prüfen, kann man das noch sicher stellen: ^[0-9a-f]+$

Und wenn man die Länger sicherstellen will:
^[0-9a-f]{1,4}$ für eine Länge von 1 - 4. (Kann man auch auf 0 setzen - dann wäre der leere String auch ok.
^[0-9a-f]{4}$ für eine Länge von genau 4.

Natürlich ist dann noch wichtig: Das if ist jetzt umgedreht. true bedeutete bisher bei Dir: Ungültig. Jetzt bedeutet ein true: gültig.
Jepp, aber da war ich jetzt parallel zur Telko nicht in der Lage das zu formulieren :)
 

KonradN

Super-Moderator
Mitarbeiter
Das wäre sogar von der Vorgehensweise das, was ich bevorzugen würde. Zum einen ist es der positive Ansatz: Was ist erlaubt. Das ist in der Regel besser lesbar denn das wird in der Regel ja auch in Dokumentationen angegeben.

Und damit erspart man sich einige if / else in der Struktur.

Jepp, aber da war ich jetzt parallel zur Telko nicht in der Lage das zu formulieren :)
Das kenne ich etwas :)
 

Jw456

Top Contributor
Tipp: bei verkürzte Schreibweise ist es da auch richtig?

2001 : 0000 : 0000 : 0000 : 0001 : 0000 : 0000 : 0001
verkürzt
2001 : : 1 : 0 : 0 : 1
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Ja, die _gesamte_ valide Syntax von IPv6 Adressen abzubilden, erfordert seeeehr viel mehr Logik.
Siehe z.B.: https://stackoverflow.com/questions...-matches-valid-ipv6-addresses#answer-17871737
Seine Methode ist bisher: Wenn sie false zurückliefert, ist der übergebene String garantiert _keine_ gültige IPv6 Adresse.
Das heißt aber nicht: Wenn sie true zurückliefert, dass der übergebene String eine gültige IPv6 Adresse ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
S Regex - alle Matches ausgeben? Java Basics - Anfänger-Themen 2
K Prob mit java.util.regex.matches-String wird nicht erkannt? Java Basics - Anfänger-Themen 9
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
I Rechenoperatoren mit Regex splitten Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben