Die Java-Dokumentation stimmt nicht mit dem Unicode-Standard überein. Der Javadoc nebelt, was \R
passen soll. Es liest:
\R
Jede Unicode-Zeilenumbruchsequenz entspricht \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
Diese Java-Dokumentation ist fehlerhaft. In seinem Abschnitt zu Zeilenumbrüchen R1.6 stellt der Unicode Technical Standard Nr. 18 für reguläre Ausdrücke klar fest:
Es wird dringend empfohlen, ein Metazeichen mit regulären Ausdrücken wie "\ R" zu verwenden, um alle oben aufgeführten Zeichen und Sequenzen am Zeilenende abzugleichen (z. B. in # 1). Dies würde etwas entsprechen, das dem folgenden Ausdruck entspricht. Dieser Ausdruck wird durch die Notwendigkeit, eine Sicherung zu vermeiden, etwas kompliziert.
(?:\u{D A}|(?!\u{D A})[\u{A}-\u{D}\u{85}\u{2028}\u{2029}]
Mit anderen Worten, es kann nur eine CR + LF-Sequenz (Wagenrücklauf + Zeilenvorschub) mit zwei Codepunkten oder ein einzelner Codepunkt aus dieser Menge übereinstimmen , vorausgesetzt, es handelt sich nicht nur um einen Wagenrücklauf allein, dem dann ein Zeilenvorschub folgt . Das liegt daran, dass es nicht erlaubt ist, zu sichern . CRLF muss atomar sein, damit \R
es richtig funktioniert.
Java 9 entspricht also nicht mehr den Empfehlungen von R1.6. Außerdem macht es jetzt etwas, was es in Java 8 NICHT tun sollte und nicht tat.
Es scheint an der Zeit zu sein, dass ich Sherman (sprich: Xueming Shen) wieder einen Schrei gebe. Ich habe schon früher mit ihm an diesen wichtigen Fragen der formalen Konformität gearbeitet.
\R
gierig, in 9 nicht.