首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl中,如何检测一个字符串是否有多次出现的两位数?

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

Stack Overflow用户
提问于 2009-07-22 10:58:14
回答 6查看 2.2K关注 0票数 1

我想匹配110110,而不是10110。这意味着至少两个相同的连续数字重复两次。有相应的正则表达式吗?

应匹配: 110110、123445446、12344544644

不应匹配: 10110,123445

EN

回答 6

Stack Overflow用户

发布于 2009-07-22 11:09:14

代码语言:javascript
复制
/(\d)\1.*\1\1/

这将匹配一个包含两个双精度数实例的字符串,即11011,但不是10011

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

这也将匹配1111。如果在两个字符之间需要其他字符,请将.*改为.+

哦,这看起来更整洁了

代码语言:javascript
复制
((\d)\2).*\1

如果要查找不匹配的值,但必须有两组双精度值,则只需再次添加第一部分,如下所示

代码语言:javascript
复制
((\d)\2).*((\d)\4)

括号将意味着$1和$3将包含两位数,$2和$4将包含一位数(然后加倍)。

代码语言:javascript
复制
11233

$1=11
$2=1
$3=33
$4=3
票数 9
EN

Stack Overflow用户

发布于 2009-07-22 11:38:53

如果我理解正确的话,您的regexp将是:

代码语言:javascript
复制
m{
  (\d)\1            # First repeated pair
  .*                # Anything in between
  (\d)\2            # Second repeated pair
}x

例如:

代码语言:javascript
复制
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
票数 7
EN

Stack Overflow用户

发布于 2009-07-22 11:07:14

如果你说的是全数字,这就行了:

代码语言:javascript
复制
00.*00|11.*11|22.*22|33.*33|44.*44|55.*55|66.*66|77.*77|88.*88|99.*99

它只是9个不同的模式或在一起,每一个检查至少两个所需的两位数模式的出现。

使用Perls更高级的REs,您可以对两个连续的数字使用以下两次:

代码语言:javascript
复制
(\d)\1.*\1\1

或者,正如你的一条评论所说,两个连续的数字后面跟着另外两个可能不相同的连续数字:

代码语言:javascript
复制
(\d)\1.*(\d)\2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1164509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档