почему картинаNSRegularExpression с французским характером
[A-Z][A-z]*
возвращение Ve
для французского слова Vénus
с помощью NSRegularExpression .Я хочу, чтобы соответствовать верблюжьих слово, но это слово странно
почему картинаNSRegularExpression с французским характером
[A-Z][A-z]*
возвращение Ve
для французского слова Vénus
с помощью NSRegularExpression .Я хочу, чтобы соответствовать верблюжьих слово, но это слово странно
Причина, почему ваше регулярное выражение соответствует Ve
и не Vé
объясняется тем, что there are two ways to represent an é
в Юникоде:
U+00E9
илиe
, за которой следует знак объединения ´
(U+0065 U+0301
). Обратите внимание, что последний составляет не фактический «автономный» символ ´
(U+00B4
).Ваша строка, по-видимому, кодируется с использованием второго варианта. Поэтому [A-z]
соответствует только первой половине комбинированного символа. Поскольку следующее ´
не соответствует, регулярное выражение останавливается в этой точке. Вы должны сначала нормализовать строку, прежде чем применять к ней регулярное выражение.
Кроме того, используйте [A-Za-z]
вместо [A-z]
. В противном случае также будут сопоставлены некоторые небуквенные символы, такие как ^
или ]
.
Нет, я не тестировал, я просто собираюсь удалить мой ответ, поскольку он был связан с ошибками. – Dair
Теперь я полностью понимаю вас после прочтения сообщения http://nshipster.com/cfstringtransform/ .Thx –
Вы искали ответ, прежде чем спрашивать? «При указании диапазона символов, таких как [a-Z] (т. Е. В нижнем регистре a в верхний регистр z), настройки локали компьютера определяют содержимое путем численного упорядочения кодировки символов». - https://en.wikipedia.org/wiki/Regular_expression#Character_classes – Onots
@Onots: Это не относится к NSRegularExpression. Вы цитируете поведение регулярного выражения POSIX, которое здесь не применимо. – nhahtdh
@nhahtdh: Спасибо, что указали это. Итак, я googled и узнал что-то сегодня: NSRegularExpression использует синтаксис шаблона, указанный ICU. С сайта ICU: «[A-M] \t Диапазон - соответствует любому символу от A до M. Символы, которые нужно включить, определяются порядковым номером кода Юникода». – Onots