Logisch ist es (aber Logik ist irrelevant, wann immer Zeichenkodierungen oder Gebietsschemas im Spiel sind). Laut
%Vor%Drucken "y", ist es. Laut
%Vor% Rückgabe von false
in Java, ist es nicht. Das würde mich überhaupt nicht verwirren, wenn es nicht Dieser Beitrag behauptet, dass
Die aktualisierte Pattern-Klasse von Sun für JDK7 hat eine wunderbare neue Flagge, UNICODE_CHARACTER_CLASS, die alles wieder in Ordnung bringt.
Aber ich benutze Java Version "1.7.0_07" und das Flag existiert und scheint überhaupt nichts zu verändern. Darüber hinaus ist "\ n" kein Neuling in Unicode, sondern ein einfaches altes ASCII-Zeichen, so dass ich wirklich nicht sehe, wie dieser Unterschied passieren kann. Wahrscheinlich mache ich etwas Dummes, aber ich kann es nicht sehen.
Das Javadoc für java.util.regex.Pattern
erwähnt explizit \v
in seiner "Liste von Perl-Konstrukten, die von dieser Klasse nicht unterstützt werden". Es ist also nicht so, dass \n
nicht zu Javas Kategorie des "vertikalen Whitespace" gehört; Es ist, dass Java keine Kategorie von "vertikalen Whitespaces" hat.
Bearbeitet zum Hinzufügen: Stattdessen steht \v
für das vertikale Tabulatorzeichen, U + 000B . Dies ist eine traditionelle Escape-Sequenz. Es gibt auch einige andere traditionelle Escape-Sequenzen, die in Java-String-Literalen nicht erlaubt sind, aber von Pattern
( \a
für alert / bell, \cX
für Steuerelement-Zeichen X
) unterstützt werden. Seltsamerweise erwähnt das Javadoc für Pattern
jedoch nicht, dass es \v
unterstützt; daher bin ich mir nicht sicher, ob es von allen JDK-Implementierungen unterstützt werden kann.
perldoc perlrecharclass
sagt, dass \v
einem "vertikalen Leerzeichen" entspricht. Dies wird weiter erklärt:
"\ v" entspricht jedem Zeichen, das als vertikaler Leerraum betrachtet wird. Dies enthält die Wagenrücklauf- und Zeilenvorschubzeichen der Plattform (Newline) plus mehrere andere Zeichen, alle in der Tabelle aufgeführt unten. "\ V" passt auf alle Zeichen, die nicht als vertikale Leerzeichen betrachtet werden. Sie verwenden den nativen Zeichensatz der Plattform und berücksichtigen keine Gebietsschema, das sonst verwendet werden könnte.
Insbesondere entspricht \v
den folgenden Zeichen in 5.16:
Sie können eine Zeichenklasse verwenden, um denselben Effekt wie Perls \v
zu erhalten.
Natürlich gilt das für Perl; Ich weiß nicht, ob es für Java gilt.