2012-04-15 16 views
2

私はJavaからObjective Cにフレームワークを移植していますが、そのフレームワークは正規表現に大きく依存しています。残念ながら、Javaの正規表現APIはObjective C APIと大きく異なります。Objective CのJavaのMatcher.lookingAt()と同等

正規表現を評価するのに、NSRegularExpressionクラスを使用しようとしています。 Javaでは、これはまったく異なります.PatternクラスとMatcherクラスを使用する必要があります。

私は(他のものの中でも)理解できないことがあります。 Objective CのMatcher.lookingAt()に相当するものは何ですか?それをコードに入れる。次のコードのObjective Cの翻訳は何でしょうか?

Pattern pattern = Pattern.compile("[aZ]"); 
boolean lookingAt = pattern.matcher("abc").lookingAt(); 

知っている人のおかげです!

+0

私が読んだJava Docsから、lookingAt()は接頭辞マッチングを行います。それがあなたが望むなら、NSStringのhasPrefix:メソッドを使用してください。 – TheAmateurProgrammer

+0

お返事ありがとうございます! "hasPrefix"メソッドは、文字列の接頭辞を別のリテラル文字列と一致させたい場合には問題ありませんでした。しかし私が "ObjC"を私の質問に入れた場所では、ランダムな正規表現でも動作したいと思っています。私は "hasPrefix"が正規表現をサポートしているとは思わない。 –

答えて

4

私はそれを理解しました!これは、JavaコードのNSRegularExpressionと同等です:

NSError *error = nil; 
NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:@"[aZ]" options:0 error:&error]; 
if (error) { 
    // Do something when an error occurs 
} 
NSString *candidate = @"abc"; 
BOOL lookingAt = [expression numberOfMatchesInString:candidate options:NSMatchingAnchored range:NSMakeRange(0, candidate.length)] > 0; 

式を実行したときに、ここで強調NSMatchingAnchoredオプションにあります!ドキュメントは言う:

NSMatchingAnchoredマッチが検索範囲の 開始時にしたものに限定されていることを指定します。コンテキスト内の定数 の説明のために、 enumerateMatchesInString:options:range:usingBlock:を参照してください。

これはまさに私が探していたものです!

3

(ところで、上記の例は、lookingAtブールの真の割り当て)あなたは

NSString *regex = @"ObjC"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@", regex]; 

if([predicate evaluateWithObject:myString]) 
    NSLog(@"matches"); 
else 
    NSLog(@"does not match"); 

ような何かを行うことができ、さらにオプションのためのPredicate Format String Syntaxガイドを見てみましょう。

+0

ありがとう!しかし、これは私が残念ながら探していたものではありません。まず、あなたの例は、Matcher.mlookup()メソッドではなく、Matcher.matches()メソッドに相当します。第二に、NSRegularExpressionを使用するのは本当に好きです。これは、Objective Cの正規表現を使用するのが好ましい方法です。 –

+0

ああ、申し訳ありません。 'SELF CONTAINS%@'の代わりに 'SELF BEGINSWITH%@'を使うことができます。代わりに 'NSRegularExpression'を使う必要があるなら、' - rangeOfFirstMatchInString:options:range: 'のようなものを使うことを検討し、返される範囲が0から始まるかどうか確認してください。 – Saphrosit

+0

実際には、 Objective-Cの正規表現を使って作業しています。クラス名に惑わされてはいけませんが、どちらも動作しますが、NSPredicateを読みやすくすることができます。また、NSPredicateのオンラインリソースも増えていますので、NSPredicateで試してみてください。動作しない場合は、NSRegularExpressionsに戻ってください。 – TheAmateurProgrammer

関連する問題