что не так с этим простым регулярным выражением в какао - PullRequest
2 голосов
/ 12 февраля 2012

Это простое регулярное выражение, и я попытался использовать несколько инструментов онлайн-тестирования, и он работает, но когда я запускаю его в коде, это не так.

НАЧАТЬ РЕДАКТИРОВАТЬ : Это не находит никакого соответствия вообще.Я пытаюсь проверить, содержит ли строка в файле конфигурации значение http.Поэтому, если строка extraintf=, я хочу изменить ее на extraintf=http, если строка extraintf=rc:ncurses, я хочу изменить ее на extraintf=rc:ncurses:http, а если строка #extraintf=, я хочу изменить ее наextraintf=http.Я использую регулярное выражение, чтобы найти местоположение и длину этой строки, как только у меня есть начало и длина строки, я написал некоторый проверенный и рабочий код, который будет хорошо выполнять описанное выше, просто найти диапазон соответствия, который являетсяпроблема. END EDIT

Вот мое регулярное выражение:

^#?extraintf=.*$

Я хочу найти среднюю строку во всех этих файлах:

File1:

# Interface module (string)
#intf=

# Extra interface modules (string)
extraintf=                                    //match this line

# Control interfaces (string)
#control=

Файл 2:

# Interface module (string)
#intf=

# Extra interface modules (string)
extraintf=rc                                    //match this line

# Control interfaces (string)
#control=

Файл 3:

# Interface module (string)
#intf=

# Extra interface modules (string)
#extraintf=                                    //match this line

# Control interfaces (string)
#control=

И тогда я проверяю совпадение с помощью:

//check if file exists
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDirectory];

if (isDirectory || !fileExists) {
    return;
}

//get the settings file
NSError *error;
NSString *settingsString = [NSString stringWithContentsOfFile:fullPath encoding:NSMacOSRomanStringEncoding error:&error];


NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^#?extraintf=.*$" options:NSRegularExpressionCaseInsensitive error:NULL];

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

if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
    //got a match
}
else {
    //no match
}

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Вам необходимо добавить NSRegularExpressionAnchorsMatchLines к опциям. Это позволит ^ и $ соответствовать началу и концу строк.

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^#?extraintf=.*$" 
                              options:NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines 
                              error:NULL];
0 голосов
/ 12 февраля 2012

Вы пытались ослабить матч, как это?

"^[^e]?extraintf=.*$"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...