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:
druckt "1". Ich bin mir ziemlich sicher, dass die Antwort etwas Java-spezifisches ist. Würde mich bitte jemand aufklären?
Danke.
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:
String.matches()
ist definiert dasselbe tun wie Pattern.matches(regex, str)
. Pattern.matches()
ist wiederum definiert als Pattern.compile(regex).matcher(input).matches()
.
Pattern.compile()
gibt Pattern
zurück. Pattern.matcher()
gibt Matcher
Matcher.matches()
ist so dokumentiert ( Betonung meiner):
Versucht, die gesamte -Region mit dem Muster abzugleichen.
Die matches
-Methode entspricht Ihrer Regex mit der gesamten Zeichenkette.
Versuchen Sie also, .*
hinzuzufügen, um den Rest der Zeichenfolge zu finden.
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.