16

我有一个似乎无法解决的正则表达式问题。我实际上不知道正则表达式是否可以做到这一点,但我需要在模式末尾匹配一系列字符 n 次。例如。blahblah[AZ]{n} 问题是与结束范围匹配的任何字符都必须完全相同。

例如,我想匹配

  • 废话啊啊啊啊
  • 胡说八道
  • 废话QQQQ

但不是

  • 胡说八道
  • 废话ZYYYY

是否有一些正则表达式模式可以做到这一点?

4

4 回答 4

29

您可以使用此模式:blahblah([A-Z])\1+

是对第\1一个捕获组的反向引用,在这种情况下是([A-Z])。并且+将匹配该字符一次或多次。要限制它,您可以使用 将 替换+为特定的重复次数{n},例如\1{3}匹配 3 次。

如果您需要匹配整个字符串,请确保分别以 为前缀^和以 结尾$,以便模式变为^blahblah([A-Z])\1+$

您可以在此处阅读有关反向引用的更多信息。

于 2012-07-12T20:49:51.580 回答
3

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

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

请注意,要匹配正则表达式n时间,您需要使用,\1{n-1}因为一个匹配项将来自捕获组。

于 2012-07-12T20:51:17.010 回答
2

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

于 2012-07-12T20:51:04.140 回答
0

blahblah([AZ]|[az])\1+ 这应该会有所帮助。

于 2019-11-12T17:29:30.083 回答