String.matches() Regex-Anomalie: Enthüllung der versteckten Regex-Falle
In der Java-Programmierung sieht die Methode String.matches() so aus eine intuitive Möglichkeit, Zeichenfolgen anhand regulärer Ausdrücke zu validieren. Sein Verhalten kann jedoch verwirrend sein, insbesondere im Vergleich zu anderen Programmiersprachen.
Beachten Sie den folgenden Codeausschnitt:
String[] words = {"{apf","hum_","dkoe","12f"}; for(String s:words) { if(s.matches("[a-z]")) { System.out.println(s); } }
Dieser Code soll seitdem nur die Zeichenfolge „dkoe“ ausgeben es enthält nur Kleinbuchstaben. Es wird jedoch überraschenderweise nichts gedruckt! Warum ist das so?
Der Kern des Problems liegt in der Natur der String.matches()-Methode. Im Gegensatz zu ähnlichen Methoden in anderen Sprachen versucht matches(), die gesamte Eingabezeichenfolge mit dem bereitgestellten regulären Ausdruck abzugleichen. Mit anderen Worten: Es wird geprüft, ob die gesamte Zeichenfolge mit dem Muster übereinstimmt.
Der reguläre Ausdruck „[a-z]“ stimmt nur mit einem einzelnen Kleinbuchstaben überein. Da keine der Eingabezeichenfolgen nur einen einzigen Kleinbuchstaben enthält, kann die Methode „matches()“ für keine der Zeichenfolgen eine Übereinstimmung finden.
Um dieses Problem zu beheben, können zwei Ansätze gewählt werden:
Ansatz 1: Verwenden von Mustern und Matchern
Pattern p = Pattern.compile("[a-z]+"); Matcher m = p.matcher(inputString); if (m.find()) { // match found }
Dieser Ansatz verwendet ein Muster und einen Matcher, um das erste Vorkommen zu finden einer Übereinstimmung in der Eingabezeichenfolge. Der reguläre Ausdruck „[a-z]“ entspricht einem oder mehreren Kleinbuchstaben, was dem gewünschten Verhalten entspricht.
Ansatz 2: Anhängen von „“ an die Zeichenklasse
Für einfache Fälle, etwa um zu überprüfen, ob eine Zeichenfolge nur Kleinbuchstaben enthält, können Sie den regulären Ausdruck wie folgt ändern:
if(s.matches("[a-z]+")) { // match found }
Durch Anhängen von „ “ an Mit der Zeichenklasse „[a-z]“ gleicht der reguläre Ausdruck ein oder mehrere Kleinbuchstaben ab und löst so das Problem effektiv.
Wenn Sie das besondere Verhalten von String.matches() verstehen und die bereitgestellten Alternativen nutzen, können Sie dies tun Vermeiden Sie diese häufige Gefahr und validieren Sie Zeichenfolgen effektiv anhand regulärer Ausdrücke in Java.
Das obige ist der detaillierte Inhalt vonWarum kann die String.matches()-Methode von Java keine Zeichenfolgen finden, die mehrere Kleinbuchstaben enthalten, wenn ein einfacher Regex wie „[a-z]' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!