【问题标题】:match the same unknown character multiple times多次匹配相同的未知字符
【发布时间】:2012-07-12 20:46:55
【问题描述】:

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

比如我要匹配

  • blahblahAAAAA
  • blahblahEEEEE
  • blahblahQQQQ

但不是

  • blahblahADFES
  • blahblahZYYYY

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

【问题讨论】:

标签: regex


【解决方案1】:

你可以使用这个模式:blahblah([A-Z])\1+

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

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

您可以阅读有关back-references here 的更多信息。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        废话([A-Z]|[a-z])\1+ 这应该会有所帮助。

        【讨论】:

        • 为什么要使用非捕获组?在这里没用。
        • 已更正。谢谢。
        • [A-Z]|[a-z] 是一个冗长的表达式。更简单的写成[A-Za-z] if 需要不区分大小写的匹配。
        猜你喜欢
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        • 1970-01-01
        • 1970-01-01
        • 2020-12-27
        • 2013-04-30
        相关资源
        最近更新 更多