2012-04-23 11 views
1

を警告するコードNSRegularExpressionはここ

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)" options:NSRegularExpressionCaseInsensitive error:&error]; 

コード自体は動作しますが、この警告を与えるで与える:

"Unknown escape sequence \." 

私もオプションを試してみました:

NSRegularExpressionCaseInsensitive|NSRegularExpressionAnchorsMatchLines 

それでもエラー持続する。このエラーがなぜ発生し、どのように削除することができるのか誰にも説明できますか?リテラル文字列として正規表現を書いて、それがバックスラッシュが含まれている場合は、バックスラッシュは、文字列リテラルに(例えば\n\tなど)いくつかの特殊文字をエスケープするために使用されているため

+0

http://stackoverflow.com/questions/6812206/unknown-escape-sequence-regular-expression –

答えて

5

、あなたは、第二のバックスラッシュを使用してそれらをエスケープする必要があり。

正規表現に\.が含まれるようにするには、\\.と書く必要があります。これは、正規表現をファイルから読み込む場合ではなく、文字列リテラルを使用する場合にのみ適用されます。

バックスラッシュのない期間(効果的にあなたが今いるもの)を実際に使用する場合は、バックスラッシュを削除して警告を取り除きます。

+0

ありがとうございます。これは機能を変更しますか? –

+1

はい、正規表現構文の一部ではなく、ドットを正規表現にリテラルドットにします。私はこれが正規表現がどのように使われることになっているかと推測します。それ以外の場合は、警告なしで同じ動作をさせるためにバックスラッシュを削除する必要があります。 – omz

+0

@omz:この場合は意味を変えないと思います。この警告は、正規表現エンジンではなく、文字列プロセッサーから来たように見えます。これは暗黙的に '\\。'に変換されたことを意味します。しかし、 '\ b'(バックスペースと単語境界)のような他のエスケープシーケンスは、エスケープされていないと意味が変わるので、これは有用な警告です。 –