Zakładając Unicode i niewrażliwość na wielkość liter, czy wzór „..” pasuje do „FfIsS”?
To brzmi jak żart, ale mogę to udowodnić.
Założenia:
Dot pasuje do każdego pojedynczego znaku.Wzorzec bez rozróżniania wielkości liter pasujes
jeśli i tylko jeśli pasujes.toUpperCase()
.Wszystkie poniższe są dość logiczne i dotyczą języka Java:
"ffi".matches(".")
LATIN SMALL LIGATURE FFI (U + FB03) to postać, więc musi się zgadzać"ß".matches(".")
LATIN SMALL LETTER SHARP S (U + 00DF) to postać, więc musi się zgadzać"ffi".toUpperCase().equals("FFI")
według standardu Unicode (nie ma ligatury kapitału FFI)"ß".toUpperCase().equals("SS")
według standardu Unicode (jest duży, ostry S, ale nie jest używany)"FfI".toUpperCase().equals("FFI")
oczywiście"sS".toUpperCase.equals("SS")
oczywiścieZakładając więc, że pierwsza kropka w wyrażeniu regularnym oznaczaffi
a drugi dlaß
, wyrażenie regularne musi pasować do „FFISS”, a ze względu na niewrażliwość na wielkość liter także „FfIsS”.
I naprawdę miej nadzieję, że coś jest nie tak, w przeciwnym razie wyrażenia regularne stałyby się całkiem bezużyteczne.
Pytania:
Co jest nie tak z moim „dowodem”?Co dokładnie oznacza „niewrażliwy na wielkość liter”, jeśli moje drugie założenie nie jest spełnione?