2012-02-15 9 views
0

私は社会保障番号の正規表現を持っています。 Regexは、5つ以上が識別された場合にのみ「一致」しなければならないという新しい要件があります。私はいくつかの順列を試みたが、これを理解することができなかった。x以上の正規表現マッチのみが見つかりました

私の正規表現: ((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4}))

私は動作しませんでした ((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4})){5,}

を試してみました。私は行方不明のものがありますか?

+0

あなたが「一致」と言うとき、あなたはそれが前に5つの独特のSSNを見つけるのいずれかたい意味ですかかもしれませんそれは一致しますか?製作されたデータを使用して、作業の例を提供できますか? – hexparrot

+0

@hexparrotと同じq:もしあれば、それは正規表現パターンよりもソフトウェア関数のように聞こえるでしょう。 –

+0

5つ以上のSSN?だからブロック/テキスト行に5つの有効なSSNが必要ですか?あなたはそれを行うことができますが、n行のテキストの単純な表現を繰り返す方が簡単です。 ...並ぶブーのコメント。 –

答えて

0

あなたのパターンはSSN間の区切り文字を許可していないようです。私がテストすると(2回の繰り返しを探すバージョンを使用)、それは333 33 3333444 44 4444のような入力のために働くが、SSNの間に改行/タブ/スペース/ etcがあれば動作しない。区切り文字の許可リストをパターンの末尾に追加する必要があります(リスト内の最後のSSNが1で終わらない可能性があるので、おそらく?または*文字が続きます)。

あなたのSSNの間にカンマとおそらくスペースを持っている場合たとえば、あなたのパターンの改訂版が

((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4})[, ]*){5,} 
+0

私たちは.NET Regexエンジンを使用していますが、私が望むことをするのは不可能に見えます。 5つ以上のSSNは、検索されているコンテンツのどこにでも置くことができます。たとえば、5つ以上の一致が見つかった場合はテキスト文書を表示し、それ以外の場合は無視します。 – Anubis

関連する問題