Unicode tem talvez 50 espaços
\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000] [\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u0085 \ u00A \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000
e 6 quebras de linha
não apenas CRLF, LF, CR, mas também NEL (U + 0085), PS (U + 2029) e LS (U + 2028).
Talvez eu possa entender a maioria dos espaços e PS ("Separador de parágrafos"), mas para que servem "Next Line" e "Line separator"?
Tudo parece inventado por um comitê muito grande, onde todos queriam seu próprio espaço e os líderes recebiam uma quebra de linha cada. Mas, falando sério, como você lida com isso quando sua linguagem de programação não a suporta (ou faz errado como, por exemplo, Java)?
Pattern.compile2010
método que retorne expressões regulares que funcionem de acordo com a definição dos últimos anos. Eles também são livres para criar um método Pattern.compileLatestUTS
que declararia explicitamente que o significado mudaria de acordo com a nova especificação.