2012-02-15 50 views
0

我有一個社會安全號碼的正則表達式。我有一個新的要求,規定只有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

當你說「比賽」,你的意思是你想它要麼找到五個唯一的核潛艇前它匹配?'使用僞造的數據,你能提供一個例子來處理? – hexparrot 2012-02-15 20:26:58

+0

與@hexparrot相同q加上:如果是,那聽起來更像是軟件函數而不是正則表達式模式。 – 2012-02-15 20:33:29

+0

5個或更多SSN的?所以你想要一個文本塊/行中的5個有效的SSN?你可以這樣做,但迭代n行文本的簡單表達式會更簡單。 ...並行boo的評論。 – 2012-02-15 21:07:30

回答

0

它也看起來像你的模式不允許SSN之間的任何分隔符。當我測試它(使用尋找兩次重複的版本)時,它適用於像333 33 3333444 44 4444這樣的輸入,但如果SSN之間存在換行符/製表符/空格/等,則它不起作用。您可能需要將允許的分隔符列表添加到該模式的末尾(可能後跟一個?*字符,因爲列表中的最後一個SSN可能不會以一個結尾)。

例如,如果你的核潛艇之間有逗號和可能的空間你的模式的修訂版本可能

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

我們使用的是.NET Regex引擎,它看起來好像不太可能做我想做的事。 5個或更多SSN可以位於正在搜索的內容中的任何地方。例如,一個文本文件,如果找到5個或更多匹配,則顯示,否則忽略。 – Anubis 2012-02-18 06:06:37