2015-01-08 1 views
1

почему картинаNSRegularExpression с французским характером

[A-Z][A-z]* 

возвращение Ve для французского слова Vénus с помощью NSRegularExpression .Я хочу, чтобы соответствовать верблюжьих слово, но это слово странно

+1

Вы искали ответ, прежде чем спрашивать? «При указании диапазона символов, таких как [a-Z] (т. Е. В нижнем регистре a в верхний регистр z), настройки локали компьютера определяют содержимое путем численного упорядочения кодировки символов». - https://en.wikipedia.org/wiki/Regular_expression#Character_classes – Onots

+1

@Onots: Это не относится к NSRegularExpression. Вы цитируете поведение регулярного выражения POSIX, которое здесь не применимо. – nhahtdh

+1

@nhahtdh: Спасибо, что указали это. Итак, я googled и узнал что-то сегодня: NSRegularExpression использует синтаксис шаблона, указанный ICU. С сайта ICU: «[A-M] \t Диапазон - соответствует любому символу от A до M. Символы, которые нужно включить, определяются порядковым номером кода Юникода». – Onots

ответ

2

Причина, почему ваше регулярное выражение соответствует Ve и не объясняется тем, что there are two ways to represent an é в Юникоде:

  • Использование нормализованных s ingle codepoint U+00E9 или
  • Использование «разложенной» формы: e, за которой следует знак объединения ´ (U+0065 U+0301). Обратите внимание, что последний составляет не фактический «автономный» символ ´ (U+00B4).

Ваша строка, по-видимому, кодируется с использованием второго варианта. Поэтому [A-z] соответствует только первой половине комбинированного символа. Поскольку следующее ´ не соответствует, регулярное выражение останавливается в этой точке. Вы должны сначала нормализовать строку, прежде чем применять к ней регулярное выражение.

Кроме того, используйте [A-Za-z] вместо [A-z]. В противном случае также будут сопоставлены некоторые небуквенные символы, такие как ^ или ].

+0

Нет, я не тестировал, я просто собираюсь удалить мой ответ, поскольку он был связан с ошибками. – Dair

+0

Теперь я полностью понимаю вас после прочтения сообщения http://nshipster.com/cfstringtransform/ .Thx –