正则表达式匹配后x或更多被发现

问题描述:

我有一个社会安全号码的正则表达式。我有一个新的要求,规定只有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

它也看起来像你的模式不允许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