2012-02-12 14 views
2

这是一个简单的正则表达式,我试过使用一些在线测试工具,它可以工作,但是当我在代码中运行它时,它不会。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 
} 
+2

是这样的:'regularExpressionWithPattern:@“^ extraintf = $”'在您粘贴的代码中是否正确?它缺少'#'和'。*'...此外,你能解释什么不起作用吗?没有比赛呢?只是在其中一个案件? – sergio 2012-02-12 18:08:54

+0

对不起,我复制了我正在测试的代码贴,现在修复。它根本找不到任何匹配。 – lms 2012-02-12 18:11:38

回答

4

您需要将NSRegularExpressionAnchorsMatchLines添加到选项。这将允许^$匹配行的开始和结束。

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

我有同样的问题,并尝试你的方法,但它不工作..虽然在我的情况下,正则表达式字符串是不同的。 其 NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@“[a-z0-9!#$%&'* +/=?^ _'{|}〜 - ] +(?:\。[a-z0 !???-9#$%&'* +/=^_'{|}〜 - ] +)* @(:[A-Z0-9](:[A-Z0-9 - ] * [一-z0-9])\)+(?:?[AZ] {2} | COM |组织|网络| EDU | GOV |万|企业|资讯|牧高笛|名称|航空|亚洲|人才招聘|博物馆)”选项:NSRegularExpressionCaseInsensitive | NSRegularExpressionAnchorsMatchLines error:&error]; – 2012-04-23 10:06:23

0

你试过松动的比赛也是这样吗?

"^[^e]?extraintf=.*$" 
+0

尝试了'^ \#?extraintf =。* $'这给了我一个“无效的转义序列”警告,并且尝试了'^ \\#?extraintf =。* $'这不会给出警告但不起作用。 – lms 2012-02-12 18:23:26

+0

你是对的双重逃跑!你能试试我的第二个建议吗?除此之外,一切对我来说似乎都是正确的。你确定'settingsString'被正确初始化了吗? – sergio 2012-02-12 18:34:32

相关问题