Звучит как шутка, но я могу это доказать.
Предположения:
- Точка соответствует любому одиночному символу.
- Нечувствительный к регистру шаблон соответствует
s
тогда и только тогда, когда он соответствуетs.toUpperCase()
.
Все следующее довольно логично и выполняется в Java:
-
"ffi".matches(".")
LATIN SMALL LIGATURE FFI (U + FB03) - символ, поэтому он должен соответствовать -
"ß".matches(".")
LATIN SMALL LETTER SHARP S (U + 00DF) - символ, поэтому он должен соответствовать -
"ffi".toUpperCase().equals("FFI")
по стандарту Unicode (там нет лиги капитала FFI) -
"ß".toUpperCase().equals("SS")
по стандарту Unicode (там есть острый S, но он не используется) -
"FfI".toUpperCase().equals("FFI")
очевидно -
"sS".toUpperCase.equals("SS")
очевидно
Итак, если первая точка в регулярном выражении обозначает ffi
, а вторая для ß
, регулярное выражение должно соответствовать "FFISS" и из-за нечувствительности к регистру также "FfIsS".
Я действительно надеюсь, что там что-то не так, иначе регулярные выражения станут непригодными для использования.
Вопросы:
- Что не так с моим "доказательством"?
- Что означает "нечувствительность к регистру", если мое второе предположение не выполняется?