【问题标题】:Regex to match string of unique characters正则表达式匹配唯一字符的字符串
【发布时间】:2014-10-17 21:46:48
【问题描述】:

这是我的正则表达式:

((GO)( [A-Z])+)

我希望每个字母最多出现一次,不幸的是它不能正常工作,因为这个输入:

GO A B C C

返回 true,但应该返回 false。

【问题讨论】:

  • 感谢您的快速回复。我决定使用@anubhava 解决方案。我需要字母之间的空间。

标签: java regex unique


【解决方案1】:

你可以使用这个正则表达式:

^(GO(?: ([A-Z])(?!.*\2))+)$

RegEx Demo

【讨论】:

    【解决方案2】:

    你的正则表达式是:

    GO(?:([A-Z])(?!.*\1))+$
    
    • 匹配文字GO,后跟:
    • 任何字符 A-Z,从零到无限次
    • 断言,对于遇到的每个字符,相同的字符在下一个换行符 ($) 之前不匹配任何 (.) 后续字符。

    最后一步的关键是zero-length negative lookahead(?!.*\1)

    【讨论】:

    • 你测试你的正则表达式了吗? (有一个小错误,你可以在anubhavas` answer找到它)。
    • 不,@Pshemo,你抓住了我——我在飞那个。感谢您指出这一点!
    【解决方案3】:

    您可以使用以下正则表达式:

    ^GO (?:([A-Z])(?!.*\1)\s*)*$
    

    它将匹配以下任何内容:

    • GO<space>开头
    • 仅包含以下字母 ([A-Z]):
      • 可以用任何空白字符序列分隔,但是:
      • 以前可能从未见过。

    working on regex101


    示例匹配案例:

    GO A B C
    GO ABC
    GO A B C G O
    

    不匹配案例示例:

    A B C
    GO A A A
    

    【讨论】:

    • 我不确定GO ABC 是否应该在匹配的案例中(这只是基于 OP 正则表达式和示例的预感)。
    • 说实话,我也不确定。但是,我通常根据规定的要求开发我的解决方案,而不是根据提供的唯一样本数据,并且要求只说I want every letter to appear at most once ;)
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多