2

たとえば、入力値全体の検証をチェックする正規表現があるとします。たとえば、これは電子メールの入力ボックスで、ユーザーが Enter キーを押すと、^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$それが有効な電子メール アドレスかどうかを確認します。

私が達成したいのは、文字入力もインターセプトし、すべての入力文字をチェックして、その文字も有効な文字かどうかを確認することです。追加の正規表現を追加することでこれを行うことができます。たとえば[A-Z0-9._%+-] 、 but that is not what I want .

特定の正規表現から可能な限り広い範囲の許容可能な文字を抽出する方法はありますか? 上記の例で、元の正規表現 (つまり) で定義されているすべての有効な文字をプログラムで抽出できますか?^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

助けやヒントをいただければ幸いです。

PS これは、Objective-C で書かれた iOS 用のプロジェクトです。

4

1 に答える 1

1

正規表現パーサーの半分を書くことを気にしないのであれば、確かに。リテラルとメタ文字を区別し、すべての文字クラスをアンロール/マージできる必要があります (正規表現フレーバーがサポートしている場合は、否定文字クラス、およびネストされた否定文字クラスを含む)。

便利なメソッドが付属していない場合NSRegularExpressions、それがどのように可能になるか想像できません。考えてみて^ください。文字クラスの外にある場合は、無視できるメタ文字です。文字クラス内にある場合、それは最初の文字でない限り文字クラスを否定するメタ文字です。-最初の文字、最後の文字、または別の文字範囲の直後 (正規表現の種類による) でない限り、文字クラス内のメタ文字です。また、エスケープされた文字についても話していません。

についてはわかりませんNSRegularExpressionsが、一部のフレーバーはネストされた文字クラスもサポートしています ([a-z[^aeiou]]すべての子音など)。私はあなたがこれで私が行くところに着くと思います。

于 2012-11-14T15:08:55.317 に答える