正则表达式:在单词中匹配4位数

And*_*odd 7 regex perl

我有一个文本正在寻找从中提取重复的4位数字.

例如:

第一个是1234 2)第二个是2098 3)第三个是3213

现在我知道我只需使用以下内容即可获得第一组数字:

    /\d{4}/
Run Code Online (Sandbox Code Playgroud)

...返回1234

但是我如何匹配第二组数字,或第三组数字,依此类推......?

编辑:我如何返回2098或3213

Bor*_*din 11

您似乎还没有正确回答您的问题.

解决方案是/g在正则表达式上使用修饰符.在列表上下文中,它会立即找到字符串中的所有数字,就像这样

my $str = 'The first is 1234 2) The Second is 2098 3) The Third is 3213';

my @numbers = $str =~ /\b \d{4} \b/gx;

print "@numbers\n";
Run Code Online (Sandbox Code Playgroud)

产量

1234 2098 3213
Run Code Online (Sandbox Code Playgroud)

或者你可以使用while循环中的标量上下文来迭代它们,就像这样

while ($str =~ /\b (\d{4}) \b/gx) {
  my $number = $1;
  print $number, "\n";
}
Run Code Online (Sandbox Code Playgroud)

产量

1234
2098
3213
Run Code Online (Sandbox Code Playgroud)

我已经加入了\b图案的正则表达式,使其只匹配整个四位数字,并且不,例如,发现12341234567.该/x修正只是让我加空格,这样的模式更容易理解.