Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-忽略某些字符时进行匹配_Regex - Fatal编程技术网

Regex 正则表达式-忽略某些字符时进行匹配

Regex 正则表达式-忽略某些字符时进行匹配,regex,Regex,我试图编写一个正则表达式来最大化5位数或以上的数字序列,但在进行分析时,我忽略了任何空格、破折号、paren或散列。这是我到目前为止所拥有的 (\d|\(|\)|\s|#|-){5,} 问题是,这将匹配5个字符的任何序列,包括我想忽略的字符,因此类似“#123”的内容将匹配。虽然我确实想忽略#和空格字符,但我仍然需要数字本身为5位或更多,才能在比赛中获得资格 明确地说,这些将匹配: 1-2-3-4-5 123 45 2(134) 5 如果匹配以数字开始和结束,而不是以我排除的其中一个“特

我试图编写一个正则表达式来最大化5位数或以上的数字序列,但在进行分析时,我忽略了任何空格、破折号、paren或散列。这是我到目前为止所拥有的

(\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`。