我知道可以使用Perl中的正则表达式通过[\d]
来捕获数字,但是我的模式是这样的:
261 193 546 302
或者可以这样:
16 0 98 120
重点是 - 我只想捕捉一个由空格分隔的任意四个数字组成的行。每个数字可以由任意数量的数字组成,可以是一位数、两位数等。
^\d+(?:\s+\d+){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
根据您的要求:“捕获包含任何四个以空格分隔的数字的行”,我会使用以下内容,它包含一个捕获组,其中将包含您的数字序列,并忽略任何前导或尾随空格。
((?:\d+\s){3}\d+)
在 Perl 中的使用方法
$re = "/((?:\\d+\\s){3}\\d+)/";
(^.*(?:\d+\s){3}\d+.*$)
在Perl中的使用
$re = "/(^.*(?:\\d+\\s){3}\\d+.*$)/mx";
^\d+\s\d+\s\d+\s\d+$
。这将匹配4个数字,带有空格且没有其他内容。
\
或[ ]
。 - user557597