Это простое регулярное выражение, и я попытался использовать несколько инструментов онлайн-тестирования, и он работает, но когда я запускаю его в коде, это не так.
НАЧАТЬ РЕДАКТИРОВАТЬ : Это не находит никакого соответствия вообще.Я пытаюсь проверить, содержит ли строка в файле конфигурации значение 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
}