在Perl中,如何检测字符串是否多次出现两位数?

1 regex perl repeat

我想匹配110110但不匹配10110.这意味着至少两次重复两个相同的连续数字.任何正则表达式?

应匹配:110110,123445446,12344544644

不匹配:10110,123445

Xet*_*ius 9

/(\d)\1.*\1\1/
Run Code Online (Sandbox Code Playgroud)

这匹配一个带有2个双数实例的字符串,即11011但不是10011

\d匹配任何数字 \1匹配第一个匹配有效地加倍第一个条目

这也将匹配1111.如果在更改.*到.+之间需要有其他字符

哦,这看起来更整洁

((\d)\2).*\1
Run Code Online (Sandbox Code Playgroud)

如果你想找到不匹配的值,但是必须有2组双打,那么你只需要再次添加第一部分,就像在

((\d)\2).*((\d)\4)
Run Code Online (Sandbox Code Playgroud)

包围将意味着$ 1和$ 3将包含两位数,$ 2和$ 4包含单个数字(然后加倍).

11233

$1=11
$2=1
$3=33
$4=3
Run Code Online (Sandbox Code Playgroud)


小智 7

如果我理解正确,你的正则表达式将是:

m{
  (\d)\1            # First repeated pair
  .*                # Anything in between
  (\d)\2            # Second repeated pair
}x
Run Code Online (Sandbox Code Playgroud)

例如:

for my $x (qw(110110 123445446 12344544644 10110 123445)) {
    my $m = $x =~ m{(\d)\1.*(\d)\2} ? "matches" : "does not match";
    printf "%-11s : %s\n", $x, $m;
}
110110      : matches
123445446   : matches
12344544644 : matches
10110       : does not match
123445      : does not match
Run Code Online (Sandbox Code Playgroud)