我想匹配110110但不匹配10110.这意味着至少两次重复两个相同的连续数字.任何正则表达式?
应匹配:110110,123445446,12344544644
不匹配:10110,123445
/(\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)
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |