perl regex - 捕获由空格分隔的四个数字

时间:2014-12-31 19:52:24

标签: regex perl

我知道我们可以在perl中使用regex来使用[\d]来捕获数字,但我的模式是这样的:

261 193 546 302

或者可能是这样的:

16 0 98 120

关键是 - 我只想抓住一个由空格分隔的任意四个数字的线。每个号码可以由任意数量的数字组成,可以是一位数字,也可以是两位数字,依此类推。

4 个答案:

答案 0 :(得分:3)

您不必显式地将令牌包装在字符类中。为此你要断言字符串的开头和字符串位置的结束,所以我会使用锚点并量化一个非捕获组" 3"次。

^\d+(?: \d+){3}$

说明:

^         # the beginning of the string
\d+       # digits (0-9) (1 or more times)
(?:       # group, but do not capture (3 times):
          #   ' '
  \d+     #   digits (0-9) (1 or more times)
){3}      # end of grouping
$         # before an optional \n, and the end of the string

答案 1 :(得分:2)

根据您对<#34; 的要求,抓住一个由空格分隔的任意四个数字的行&#34;。我将使用以下内容,因为它包含一个捕获组,它将包含您的数字序列,并将忽略任何前导或尾随空格。

((?:\d+\s){3}\d+)

<强> REGEX101

Perl中的用法

$re = "/((?:\\d+\\s){3}\\d+)/"; 

正如您所看到的,它将完全匹配由单个空格分隔的 4 数字,并将忽略前导和尾随字符。

替代

如果您明确并且实际上想要捕获整个行,包括任何其他字符,那么这将更适合。

(^.*(?:\d+\s){3}\d+.*$)

<强> REGEX101

在Perl中使用

$re = "/(^.*(?:\\d+\\s){3}\\d+.*$)/mx"; 

请注意,由于结构的方式,这将匹配带小数位的数字。

答案 2 :(得分:1)

试试^\d+\s\d+\s\d+\s\d+$。这将匹配4个数字与空格,没有别的。

Sample

答案 3 :(得分:1)

^\d+(?:\s+\d+){3}$

试试这个。这应该为你做。

相关问题