2010-01-22 87 views
4

首先,这个问题可能以前曾被问过,但我不确定要搜索什么词组。在正则表达式中使用子字符串两次

我有一个字符串:

Maaaa

我有一个模式:

AAA

我想匹配两次,让我开始指数为1和2.但是我当然只能得到一场比赛(st艺术指数1),因为正则表达式引擎吞噬所有3个“a”,并且不能再次使用它们,留下1个“a”,这不匹配。

我该如何解决这个问题?

谢谢!

回答

9

你可以使用一个前向断言找到一个一个接着2 A的

a(?=aa) 
+0

添加一点色彩的评论,你可以在这里找到更多关于[zero-width] lookahead断言的信息:http://www.regular-expressions.i nfo/lookaround.html – 2010-01-23 00:02:18

0

man perlre manpage建议:

my @a; 
"Maaaa" =~ /aaa(?{push @a,$&})(*FAIL)/; 
print join "\n",@a; 
print "\n"; 

这将产生

aaa 
aaa 
+1

是否有任何理由使用这个丑陋代替简单的7个字符的正则表达式? – 2010-01-23 02:09:02

+0

heh,no。我只是觉得这很有趣。 – 2010-01-23 09:22:45

相关问题