webentwicklung-frage-antwort-db.com.de

Regex funktioniert nicht in String.matches ()

Ich habe diesen kleinen Code

String[] words = {"{apf","hum_","dkoe","12f"};
for(String s:words)
{
    if(s.matches("[a-z]"))
    {
        System.out.println(s);
    }
}

Soll gedruckt werden 

dkoe

aber es druckt nichts !!

106
John

Willkommen bei der falsch benannten .matches()-Methode von Java ... Es wird versucht, ALLE Eingaben zu überprüfen. Leider sind andere Sprachen gefolgt :(

Wenn Sie feststellen möchten, ob der reguläre Ausdruck mit einem Eingabetext übereinstimmt, verwenden Sie eine Pattern, eine Matcher und die .find()-Methode des Matchers:

Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match

Wenn Sie tatsächlich sehen möchten, ob eine Eingabe nur aus Kleinbuchstaben besteht, können Sie .matches() verwenden, aber Sie müssen ein oder mehrere Zeichen zuordnen: Hängen Sie einen + an Ihre Zeichenklasse an, wie in [a-z]+. Oder verwenden Sie ^[a-z]+$ und .find().

263
fge

[a-z] stimmt mit einem single char zwischen a und z überein. Wenn Ihre Zeichenfolge zum Beispiel nur "d" wäre, wäre sie übereinstimmen und ausgedruckt worden. 

Sie müssen Ihre Regex in [a-z]+ ändern, um eine oder mehrere Zeichen zu finden. 

32
dogbane

Javas Implementierung von Regex versucht, die gesamte Zeichenfolge abzugleichen

das unterscheidet sich von Perl-Regexen, die versuchen, einen passenden Teil zu finden

wenn Sie eine Zeichenfolge mit nur Kleinbuchstaben suchen möchten, verwenden Sie das Muster [a-z]+.

wenn Sie einen String mit mindestens einem Kleinbuchstaben suchen möchten, verwenden Sie das Muster .*[a-z].*.

16
Hachi

String.matches gibt zurück, ob die Zeichenfolge whole mit dem regulären Ausdruck übereinstimmt, und nicht nur eine Teilzeichenfolge.

14
yshavit

Gebraucht

String[] words = {"{apf","hum_","dkoe","12f"};
    for(String s:words)
    {
        if(s.matches("[a-z]+"))
        {
            System.out.println(s);
        }
    }
8
Boni

Ich habe einmal das gleiche Problem gehabt:

Pattern ptr = Pattern.compile("^[a-zA-Z][\\']?[a-zA-Z\\s]+$");

Das obige ist fehlgeschlagen!

Pattern ptr = Pattern.compile("(^[a-zA-Z][\\']?[a-zA-Z\\s]+$)");

Das obige arbeitete mit dem Muster innerhalb von ( und ).

4
Shanta

Ihr regulärer Ausdruck [a-z] stimmt nicht mit dkoe überein, da er nur mit Zeichenfolgen der Länge 1 übereinstimmt. Verwenden Sie etwas wie [a-z]+.

0
user647772