我想匹配110110,而不是10110。这意味着至少两个相同的连续数字重复两次。有相应的正则表达式吗?
应匹配: 110110、123445446、12344544644
不应匹配: 10110,123445
发布于 2009-07-22 11:09:14
/(\d)\1.*\1\1/这将匹配一个包含两个双精度数实例的字符串,即11011,但不是10011
\d匹配任何数字,\1匹配第一个匹配项,有效地使第一个条目加倍
这也将匹配1111。如果在两个字符之间需要其他字符,请将.*改为.+
哦,这看起来更整洁了
((\d)\2).*\1如果要查找不匹配的值,但必须有两组双精度值,则只需再次添加第一部分,如下所示
((\d)\2).*((\d)\4)括号将意味着$1和$3将包含两位数,$2和$4将包含一位数(然后加倍)。
11233
$1=11
$2=1
$3=33
$4=3发布于 2009-07-22 11:38:53
如果我理解正确的话,您的regexp将是:
m{
(\d)\1 # First repeated pair
.* # Anything in between
(\d)\2 # Second repeated pair
}x例如:
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发布于 2009-07-22 11:07:14
如果你说的是全数字,这就行了:
00.*00|11.*11|22.*22|33.*33|44.*44|55.*55|66.*66|77.*77|88.*88|99.*99它只是9个不同的模式或在一起,每一个检查至少两个所需的两位数模式的出现。
使用Perls更高级的REs,您可以对两个连续的数字使用以下两次:
(\d)\1.*\1\1或者,正如你的一条评论所说,两个连续的数字后面跟着另外两个可能不相同的连续数字:
(\d)\1.*(\d)\2https://stackoverflow.com/questions/1164509
复制相似问题