2012-02-12 6 views
2

これは簡単な正規表現ですが、いくつかのオンラインテストツールを試してみましたが、動作しますが、コードで実行した場合は動作しません。ココアのこの単純な正規表現で何が問題なのですか

BEGIN EDIT:これはまったく一致しません。私がしようとしているのは、設定ファイルの行にhttp設定が含まれているかどうかを確認することです。したがって、行がextraintf=の場合はextraintf=http、行がextraintf=rc:ncursesの場合はextraintf=rc:ncurses:httpに変更し、行が#extraintf=の場合はextraintf=httpに変更したいと考えています。私はその行の位置と長さを見つけるために正規表現を使用しています。上記の罰金を行うテスト済みの作業用コードを書いた行の長さと長さがあれば、それはマッチの範囲を見つけることだけです問題。 END EDIT

は、ここに私の正規表現です:

はFile1:

# Interface module (string) 
#intf= 

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

# Control interfaces (string) 
#control= 

ファイル2:私はそれは、これらのファイルのすべての中間ラインを見つけたい

^#?extraintf=.*$ 

# 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 = $ "'あなたがペーストしたコードでは正しいですか?それは '#'と '。*'が欠けています...さらに、何がうまくいかないのか説明できますか?全くマッチしない?場合の1つでは? – sergio

+0

申し訳ありませんが、私はテストしていたコードをパースしてコピーしました。それはまったく一致を見つけることはありません。 – lms

答えて

4

オプションにNSRegularExpressionAnchorsMatchLinesを追加する必要があります。これにより、^$は行の先頭と末尾に一致します。

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

私は同じ問題を抱えていましたが、私の場合は正規表現の文字列が異なりますが、それはうまくいきません。 NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@ "[a-z0-9!#$%& '* +/=?^ _ {{}}〜 - ](?:\。[a-z0 (?:[a-z0-9](?:[a-z0-9])* [a-z0-9] -z0-9])?\。)+(?:[AZ] {2} | com | org | net | edu | gov | mil | biz | info | mobi | name | aero | asia | jobs | museum)オプション:NSRegularExpressionCaseInsensitive | NSRegularExpressionAnchorsMatchLinesエラー:&error]; –

0

は、あなたがこのように試合を緩めてみましたがありますか?

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

「^ \#?extraintf =。* $ 'は「無効なエスケープシーケンス」警告を表示し、警告を出すが動作しない'^\\#?extraintf =。* * $ ' 。 – lms

+0

あなたはダブルエスケープについて正しいです!私の2番目の提案を試すことができますか?それ以外は、すべてが正しいようです。 'settingsString'が正しく初期化されていますか? – sergio

関連する問題