這是一個簡單的正則表達式,我試過使用一些在線測試工具,它可以工作,但是當我在代碼中運行它時,它不會。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