这是一个简单的正则表达式,我试过使用一些在线测试工具,它可以工作,但是当我在代码中运行它时,它不会。Cocoa中这个简单的正则表达式有什么问题
BEGIN EDIT:它根本找不到任何匹配。我想要做的是检查配置文件中的某行是否包含http
设置。所以如果一行是extraintf=
我想将其更改为extraintf=http
,如果行是extraintf=rc:ncurses
,我想将其更改为extraintf=rc:ncurses:http
,并且如果行是#extraintf=
我想将其更改为extraintf=http
。我使用一个正则表达式来查找该行的位置和长度,一旦我有了行的开始和长度,我写了一些测试和工作代码,它们将执行上述的罚款,它只是找到匹配的范围,即问题。 编辑完
这里是我的正则表达式:
^#?extraintf=.*$
我想找到它在所有这些文件的中间线:
文件1:
# 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
}
是这样的:'regularExpressionWithPattern:@“^ extraintf = $”'在您粘贴的代码中是否正确?它缺少'#'和'。*'...此外,你能解释什么不起作用吗?没有比赛呢?只是在其中一个案件? – sergio 2012-02-12 18:08:54
对不起,我复制了我正在测试的代码贴,现在修复。它根本找不到任何匹配。 – lms 2012-02-12 18:11:38