【问题标题】:Regex no two consecutive characters are the same正则表达式没有两个连续的字符是相同的
【发布时间】:2014-03-22 04:50:23
【问题描述】:

如何编写一个正则表达式,其中 x 是一个字符串,其字符为 a、b、c,但没有两个连续字符相同

例如

abcacb 是真的

acbaac 是假的

【问题讨论】:

    标签: regex


    【解决方案1】:

    ^(?!.*(.)\1)[abc]+$ 如果您完全遵循原始问题,则可以使用。但是,这 工作/检查字符 a/b/c 的多个“单词”,即。 "abc cba"。

    它的工作方式是通过利用前瞻内的捕获组断言任何字符不跟随其自身,并且整个字符串仅由字符“a”、“b”或“c”组成。

    【讨论】:

      【解决方案2】:

      由于字符数有限,您可以在前瞻中无需反向引用:

      ^(?!.*(aa|bb|cc)[abc]*$
      

      但我更喜欢tenub的回答:)

      【讨论】:

        【解决方案3】:
        • 使用消极的后视:^([abc]([abc](?<!(aa|bb|cc)))*)?$TRY HERE

        • 使用负前瞻:^(((?!(aa|bb|cc))[abc])*[abc])?$TRY HERE

        如果您打算将此正则表达式用作您可能正在创建的一些更大的正则表达式的一部分,请选择其中任何一个(两者都做相同的工作但不同)。
        简而言之,这是可重复使用的。复制和粘贴,它会在不干扰周围存在的任何正则表达式的情况下完成工作。

        以我的拙见,@tenub@Bohemian 中提供的正则表达式不可重复使用,这可能会导致错误。

        注意:空字符串 ("") 将通过这 2 个正则表达式。如果您不想这样做,请从正则表达式中删除 ?

        【讨论】:

        • 在重用此正则表达式之前从正则表达式中删除 ^$^ 表示字符串的开头,$ 表示字符串的结尾。
        猜你喜欢
        • 1970-01-01
        • 2012-02-11
        • 2017-03-12
        • 1970-01-01
        • 2022-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多