2012-07-12 63 views
9

我有一个正则表达式问题,我似乎无法解决。我实际上不知道正则表达式是否可以做到这一点,但我需要在模式结尾处匹配n次字符范围。 例如。 blahblah [A-Z] {n} 问题是无论字符匹配结束范围都需要完全相同。多次匹配相同的未知字符

例如,我想匹配

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQQ

但不

  • blahblahADFES
  • blahblahZYYYY

有没有一些正则表达式模式可以做到这一点?在这种情况下([A-Z])blahblah([A-Z])\1+

\1是背面参照第一捕获组,:

+0

看到这个问题:http://stackoverflow.com/questions/7147810/regular-expression-same-character-3-times – Palladium 2012-07-12 20:49:55

+0

谢谢你的答案,这个作品很棒 – 2012-07-12 20:56:13

回答

18

可以使用这种模式。并且+将匹配该字符一次或多次。为了限制它,您可以使用{n}替换+,使用\1{3},这些匹配次数可以重复三次。

如果你需要把整个字符串匹配,那么可以肯定分别与^前缀与$结束,使图案变得^blahblah([A-Z])\1+$

你可以阅读更多关于back-references here

0

blahblah(.)\1*\b应该适用于几乎所有的语言风格。 (.)捕获任何东西,然后\1*任何次数匹配(第一次匹配)。

2

在大多数正则表达式实现中,您可以通过引用正则表达式中的捕获组来完成此操作。对于你的榜样,您可以使用下面的五倍匹配相同的大写字符:

blahblah([A-Z])\1{4} 

注意,要n次匹配正则表达式,你需要使用\1{n-1}因为一场比赛将来自捕获组。