2016-08-31 3 views
-1

Das folgende Codeteil gibt false zurück, wenn es der Wahrheit entspricht. Kann mir jemand sagen warum? Es verwendet java.util.regex.Pattern, um die Regex zu analysieren.

Pattern.compile("^\|:\|$".matcher("| |").matches(); 
+0

„Entwurfsmuster“ zu wollen, ist absolut nicht „regex Muster“ –

+0

Der Punkt ist, dass 'matches()' eine vollständige Zeichenfolge Spiel erfordert. –

+1

Warum das: und der Raum? Ich verstehe die Logik dieses Versuchs nicht. Willst du '"^\\ |. * \\ | $ "'? –

Antwort

2

EIN \ in einem Stringliteral muß \\ entwertet werden.

Wenn Sie irgendetwas dazwischen einfügen möchten, verwenden Sie .*, nicht :.

Wenn Sie die matches Methode in Java verwenden, müssen Sie nicht die Zeichenfolge Grenzen ^ und $ da diese Funktion true gibt nur hinzufügen, wenn er die ganze Zeichenfolge übereinstimmt.

Sie scheinen

Pattern.compile("\\|.*\\|").matcher("| |").matches(); 
+0

Ich denke du meinst "" \\ |. * \\ " – revo

+0

@revo ja, danke (nahm mich eine Weile, um den Unterschied zu sehen ... diese Zeichenfolge entkommen ist so schmerzhaft ...) –

+1

Beachten Sie, dass ich didn Lösche diese Antwort (vorerst) nicht, da ich immer noch unsicher bin, ob es nützlich ist oder nicht (die Frage ist eindeutig kein exaktes Duplikat IMO) –

Verwandte Themen