Warum funktioniert diese Regex nicht wie erwartet in Java?

8

triviale Regex-Frage (die Antwort ist höchstwahrscheinlich Java-spezifisch):

%Vor%

Dies gibt false zurück. Soweit ich sehen kann, bedeutet ^ , was es immer bedeutet und # hat keine spezielle Bedeutung, also würde ich ^# als "A '#' am Anfang der Zeichenfolge übersetzen". Welches sollte übereinstimmen. Und so ist es in Perl:

%Vor%

druckt "1". Ich bin mir ziemlich sicher, dass die Antwort etwas Java-spezifisches ist. Würde mich bitte jemand aufklären?

Danke.

    
0xCAFEBABE 25.01.2011, 09:54
quelle

3 Antworten

17

Matcher.matches() prüft auf Sehen Sie nach, ob die gesamte Eingabezeichenfolge mit der Regex übereinstimmt.

Da Ihre Regex nur mit dem allerersten Zeichen übereinstimmt, wird false zurückgegeben.

Sie möchten Matcher.find() verwenden. statt.

Zugegeben, es kann etwas schwierig sein, die konkrete Spezifikation zu finden, aber es ist da:

Joachim Sauer 25.01.2011, 09:58
quelle
2

Die matches -Methode entspricht Ihrer Regex mit der gesamten Zeichenkette.

Versuchen Sie also, .* hinzuzufügen, um den Rest der Zeichenfolge zu finden.

%Vor%

was true zurückgibt. Man kann sogar alle Anker (sowohl Start als auch Ende) aus der Regex löschen und die Methode match wird sie für uns hinzufügen. Im obigen Fall hätten wir auch "#.*" als Regex verwenden können.

    
codaddict 25.01.2011 10:00
quelle
0

Dies sollte Ihre Erwartungen erfüllen:

%Vor%

Jetzt entspricht die Eingabezeichenfolge dem Muster "Das erste Zeichen muss # sein, der Rest muss ein beliebiges Zeichen sein"

Nach dem Joachims-Kommentar entspricht Folgendes:

%Vor%     
Andreas_D 25.01.2011 10:00
quelle

Tags und Links