3

Objective-c では、文法的にではなく、適切な英文/単語であるかどうかを確認したい.. 例: "I did not go!"、"""Hi" is a word"、"hello world"、 「5桁の数字」「%が高い!」および「x@x.com」はパスする必要があります。ただし、"@/-5%;l:" のようなテキストは渡してはなりません。次のテキストが含まれる可能性があります: 数字 0 ~ 9、文字 a ~ z、AZ、および -/:;()$&\"'!?,._

私は試した:

NSString *regex1 = @"^[\w:;()'\"\s-]*";
NSPredicate *streamTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex1];
return [streamTest evaluateWithObject:candidate];

しかし、それは私が望むものを達成しません

4

1 に答える 1

1

これは正規表現にとって難しい作業であるという@borrrdenに同意しますが、行う必要があることの1つは、正規表現のバックスラッシュを(より良い言葉が必要なため)別のバックスラッシュ(\)でエスケープすることです。このような:

NSString *regex1 = @"^[\\w:;()'\"\\s-]*";

この背後にある理由は、正規表現エンジンにバックスラッシュを「認識」させたいが、NSString を処理するコンパイラーもバックスラッシュを使用して特定の文字をエスケープするためです。"w" と "s" はこれらの文字に含まれていないため、\wとはそれぞれとに\s変換されます。ws

リテラル文字列内の二重のバックスラッシュは、コンパイルされた文字列に単一のバックスラッシュを取得するのに役立ちます。

于 2013-06-24T09:28:47.050 に答える