Разница между NSRegularExpression и preg - PullRequest
1 голос
/ 25 ноября 2011

Я боролся с использованием NSRegularExpression, есть ли какое-то существенное отличие от Regex, о котором я не знаю?

Я пытаюсь это:

NSString *str = @"&url=http%3A%2F%2Fi.hello.com/random/depeth/in/string.JPG%3Fset_id"

NSError *error = NULL;

NSRegularExpression *regex = [NSRegularExpression 
                              regularExpressionWithPattern:@"i(.+?)%3Fset_id" 
                              options:NSRegularExpressionCaseInsensitive 
                              error:&error];

NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:str 
                             options:0 range:NSMakeRange(0, [str length])];

Я бы хотел, чтобы rangeOfFirstMatch был диапазоном .hello.com / random / depeth / in / string.JPG

регулярное выражение "i (. +?)% 3Fset_id", кажется, прекрасно работает в preg.

Вид потерянного.

Заранее спасибо.

1 Ответ

2 голосов
/ 25 ноября 2011

rangeOfFirstMatchInString:… не делает то, что вы ожидаете: он находит первое совпадение в строке всего регулярного выражения. То, что вы хотите, это что-то вроде:

NSTextCheckingResult *result = [regex firstMatchInString:Str options:0 range:NSMakeRange(0, [Str length])];
NSRange rangeOfFirstSubexpression = [result rangeAtIndex:1];
NSString *firstSubexpression = [Str substringWithRange:rangeOfFirstSubexpression];

(Также обратите внимание, что использование неглобальных неконстант с прописной буквы не является соглашением Какао, хотя это, очевидно, не нарушит ваш код.)

...