我知道我们可以在perl中使用regex来使用[\d]
来捕获数字,但我的模式是这样的:
261 193 546 302
或者可能是这样的:
16 0 98 120
关键是 - 我只想抓住一个由空格分隔的任意四个数字的线。每个号码可以由任意数量的数字组成,可以是一位数字,也可以是两位数字,依此类推。
答案 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个数字与空格,没有别的。
答案 3 :(得分:1)
^\d+(?:\s+\d+){3}$
试试这个。这应该为你做。