2016-03-30 5 views
1

Code:Was bedeutet das Regex-Muster "[\ P {L}] +" in Java?

Arrays.asList("AAAA DDDD, DDDD".split("[\\P{L}]+")).forEach(System.out::println); 

Ausgang:

AAAA 
DDDD 
DDDD 

Bitte beachten Sie, es ist P{L} statt p{L} (die Buchstaben bedeutet). Ich habe es gegoogelt, aber nichts gefunden. Könnte mir irgendjemand etwas dazu sagen?

+0

Siehe [diese Frage] (http://stackoverflow.com/questions/5969440/what-is-the-l-unicode-category) für einen Link zu der Website, auf der dieses Thema ausführlich beschrieben wird. –

Antwort

4

Sie können die Erklärung in Pattern Javadoc finden:

Unicode-Skripte, Blöcke, Kategorien und binäre Eigenschaften sind geschrieben mit den \p und \P Konstrukte wie in Perl. \p{prop} stimmt überein, wenn die Eingabe die Eigenschaft prop hat, während \P{prop} nicht übereinstimmt, wenn die Eingabe diese Eigenschaft hat.

So ist es das Gegenteil von \p.

2

Einfach: Es ist das Gegenteil von \\p{L}.

Im Wesentlichen alle "Nicht-Buchstaben".

ich keine genaue Referenz in der API finden konnte, aber Sie können den Vorschlag aus dem Verhalten oder, sagen wir, \\s vs \\S schließen (die dort dokumentiert ist).

bearbeiten (Kredit Tunaki für mit Augen)

Dies wird tatsächlich durch die folgende Anweisung in der Dokumentation vorgeschlagen:

Unicode-Blöcke und Kategorien werden mit der \ p geschrieben und \ P Konstruiert wie in Perl.

+0

Gibt es ein Dokument oder eine Referenz? – Sayakiss

+0

@Sayakiss Tonnen davon über das Internet, eigentlich. http://www.regular-expressions.info/unicode.html: * Sie können ein einzelnes Zeichen, das zur Kategorie "Buchstaben" gehört, mit '\ p {L}' abgleichen. Sie können ein einzelnes Zeichen, das nicht zu dieser Kategorie gehört, mit '\ P {L}'. * –