如何匹配重叠的perl正则表达式?

Rob*_*Rob 1 regex perl

我正在尝试使用正则表达式匹配重叠部分时使用/ g.我相信我需要使用lookbehind,但我无法理解文档并使其匹配.

例如,测试用例:

use feature ':5.18';
use warnings;
use diagnostics;
use utf8;

my $test = '1 1 1';
$test =~ s/(?=[0-9]+) ([0-9]+)/$1$2/g;
say $test;      # still get '1 1 1'
Run Code Online (Sandbox Code Playgroud)

我如何摆脱空间?输出应为'111'.

anu*_*ava 5

为了能够删除数字之间的空格,您可以使用零宽度环视断言:

$test =~ s/(?<=[0-9])\s+(?=[0-9])//g;
Run Code Online (Sandbox Code Playgroud)

分手:

  • (?<=[0-9]):断言我们在之前的位置有一个数字
  • \s+:匹配1+空格
  • (?=[0-9]):断言我们在下一个位置有一个数字