IOS Regex: Неизвестная escape-последовательность "\ |"

Я получаю странное предупреждение, и в результате мой поиск в регулярном выражении не работает. Здесь строка:

NSRange r = [HTML rangeOfString:@"\|(.*)\|" options:NSRegularExpressionSearch];

Где HTML - строка, в которой я уверен, содержит одно совпадение для указанного выше регулярного выражения.

Предупреждение относится только к первому вхождению "\ |", а не к обоим.

Любая помощь очень ценится!

Ответы

Ответ 1

Вы получаете предупреждение, потому что \| не является допустимой escape-последовательностью в Objective-C (или C или С++, если на то пошло). Компилятор игнорирует это и просто использует вместо него необработанный символ |, поэтому строка, которую вы фактически передаете, @"|(.*)|".

Чтобы получить нужное поведение, вам нужно избежать обратной косой черты в исходном коде, чтобы механизм регулярных выражений видел буквальную обратную косую черту и интерпретировал символ | как литерал, а не как чередование, например. @"\\|(.*)\\|".

Ответ 2

Просто добавьте, если вы имеете дело со специальными последовательностями символов в формате Unicode, вы можете использовать что-то вроде этого:

const unichar specialCharSequence='some special character';
if(specialCharSequence==L'\uxxxx')
{
   //handle the occurence of this special character
}