0

iPhone SDK を使用していますが、サポートが必要です。

次の検索用語の配列があります。

f, f, last, m 

そして文字列 (一番上の数字は便宜上単なるインデックスです):

0         10         21       30             45
firstname middlename lastname firstnameagain firstnomatch

期待される結果の範囲 (場所、長さ): (0, 1) (30, 1) (21, 4) (10, 1)

文字列内のすべての検索用語に一致する正規表現が必要ですが、それらが単語の接頭辞である場合に限ります。検索語が N 回表示される場合、最初の N 個のプレフィックスのみに一致します (この例では、「f」が 2 回入力されたため、(45, 1) で一致する可能性のあるものは返されませんでした)。

考えられる多くの正規表現を書き込もうとしましたが、すべて適切な結果と一致しませんでした。「\b」メタ文字は使用できないという結論に達しました。これは、文字列に単語以外の文字 (「firstname#」、「?lastName」、...) が隣接している可能性があるためです。

4

1 に答える 1

0

これが正規表現だけの仕事かどうかはわかりません。

これは、正規表現の有無にかかわらず、文字列をスペースで展開し、残りのプレフィックスのリストに対して各文字列をチェックすることで実現できます。

プレフィックスのリストは次のように保持します。

[f, f, last, m]

また、名と一致する場合は、見つかったプレフィックスを削除します。この場合、fを削除します。

[f, last, m]

もう一度firstnameと一致する場合は、fを再度削除し、fとの一致を試みなくなります。

[last, m]

検索を実行するには、検索プレフィックスの配列を反復処理し、NSString rangeOfString関数を使用して、検索プレフィックスが先頭にあるかどうかを確認します。それでも正規表現を使用したい場合は、以下と照合できます。

@"^(f|f|last|m)"

プレフィックスを一致させたら、それらを配列から削除してから、正規表現を再作成します。

于 2012-05-10T14:09:57.450 に答える