Regex 正则表达式-忽略某些字符时进行匹配
我试图编写一个正则表达式来最大化5位数或以上的数字序列,但在进行分析时,我忽略了任何空格、破折号、paren或散列。这是我到目前为止所拥有的Regex 正则表达式-忽略某些字符时进行匹配,regex,Regex,我试图编写一个正则表达式来最大化5位数或以上的数字序列,但在进行分析时,我忽略了任何空格、破折号、paren或散列。这是我到目前为止所拥有的 (\d|\(|\)|\s|#|-){5,} 问题是,这将匹配5个字符的任何序列,包括我想忽略的字符,因此类似“#123”的内容将匹配。虽然我确实想忽略#和空格字符,但我仍然需要数字本身为5位或更多,才能在比赛中获得资格 明确地说,这些将匹配: 1-2-3-4-5 123 45 2(134) 5 如果匹配以数字开始和结束,而不是以我排除的其中一个“特
(\d|\(|\)|\s|#|-){5,}
问题是,这将匹配5个字符的任何序列,包括我想忽略的字符,因此类似“#123”的内容将匹配。虽然我确实想忽略#和空格字符,但我仍然需要数字本身为5位或更多,才能在比赛中获得资格
明确地说,这些将匹配:
1-2-3-4-5
123 45
2(134) 5
如果匹配以数字开始和结束,而不是以我排除的其中一个“特殊字符”结束,则可获得额外积分。
进行这种匹配有什么提示吗?所以只需重复一个数字,后跟任何其他允许的字符序列5次或更多次:
^(\d[()\s#-]*){5,}$
如果减去其中一个重复并在末尾添加一个明确的数字,则可以确保它以数字结尾:
^(\d[()\s#-]*){4,}\d$
如果我正确理解需求,您可以使用:
^\d(?:[()\s#-]*\d){4,}$
它总是在开始时匹配一个数字。然后它后跟4个或更多的非捕获组,即
(?:[()\s#-]*\d)
,这意味着0个或更多列出的特殊字符后跟一个数字。您可以用\d建议非数字,因此et类似于:
(\d\D*){5,}
是一个指南。测试了我能想到的所有案例,效果完美。我会在这里试着弄清楚它为什么会起作用。谢谢。它之所以有效,是因为
\d
正好在^
之后和$
之前使用,从而消除了开头或结尾处的任何非数字大小写。OP明确了哪些字符可以忽略。例如,“1A1A”=~/(\d\d*){5,}/#=>0,但不能忽略字母,因此应返回
nil`。