Matching Unicode Bindestriche in regulären Java-Ausdrücken?

Ich versuche, einen regulären Java-Ausdruck zu erstellen, um Strings des allgemeinen Formats "foo-bar" mit Pattern.split () in "foo" und "bar" zu unterteilen. Das Zeichen "-" kann aus mehreren Bindestrichen bestehen: dem ASCII-Zeichen "-", dem Bindestrich "em", dem Bindestrich "en" usw. Ich habe den folgenden regulären Ausdruck erstellt:

private static final Pattern titleSegmentSeparator = Pattern.compile("\\s(\\x45|\\u8211|\\u8212|\\u8213|\\u8214)\\s");

enn ich die Pattern-Dokumentation richtig lese, sollte @which einen der Unicode-Striche oder den ASCII-Strich erfassen, wenn er auf beiden Seiten von Leerzeichen umgeben ist. Ich benutze das Muster wie folgt:

String[] sectionSegments = titleSegmentSeparator.split(sectionTitle);

Keine Freude. Bei der folgenden Beispieleingabe wird der Bindestrich nicht erkannt und titleSegmentSeparator.matcher (sectionTitle) .find () gibt false! @ Zurüc

Um sicherzustellen, dass keine ungewöhnlichen Zeichenelemente fehlen, habe ich System.out verwendet, um einige Debug-Informationen auszudrucken. Die Ausgabe ist wie folgt: Auf jedes Zeichen folgt die Ausgabe von (int) char, die der Unicode-Codepunkt sein sollte, no?

Beispieleingabe:

Study Zusammenfassung (1 von 10) - Competition

S (83) t (116) u (117) d (100) y (121) (32) S (83) u (117) m (109) m (109) a (97) r (114) y ( 121) (32) ((40) 1 (49) (32) o (111) f (102) (32) 1 (49) 0 (48)) (41) (32) - (8211) (32) C (67) o (111) m (109) p (112) e (101) t (116) i (105) t (116) i (105) o (111) n (110)

Es sieht für mich so aus, als wäre der Bindestrich der Codepoint 8211, der von der Regex abgeglichen werden sollte, ist es aber nicht! Was ist denn hier los

Antworten auf die Frage(2)

Ihre Antwort auf die Frage