我知道,我们可以使用正则表达式在 perl 中捕捉数字使用[d],但是我的模式是这样:

261 193 546 302

或者它可能像这样︰

16 0 98 120

是的我只是想要捕捉任何由空格分隔的四个数字的行。每个数字可以组成任意数量的数字,可能是一位数字或一个两位数的数字,等等。

2014-12-31 00:00:00
问题评论:

回答:

^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 
, and the end of the string

别忘了使用 [ ]的空间。

根据您的要求为"捕获一条线,其任何以空格分隔的四个数字"。我将使用以下,因为它包含一个捕获组,它将包含您的编号规则并将忽略任何前导或尾随空格。

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

REGEX101

在 Perl 中的用法

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

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

备用

如果您在被显式和确实想要捕获包括这将会更好地适合任何其他字符的行。

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

REGEX101

在 Perl 中的用法

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

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

请尝试^d+sd+sd+sd+$它将匹配使用空格而不是其他的 4 个。

示例

@smerny 您说得对,它应该是 d +。每秒的不良修复

您是在它使用 s+ 也。更可靠。

请输入您的翻译

perl regex - catching four numbers separated by space

确认取消