正则表达式匹配唯一字符串

时间:2014-10-17 21:46:49

标签: java regex unique

这是我的正则表达式:

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

我希望每封信最多出现一次,不幸的是它无法正常工作,因为这个输入:

GO A B C C

返回true,但应返回false。

3 个答案:

答案 0 :(得分:5)

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

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

RegEx Demo

答案 1 :(得分:4)

你的正则表达式是:

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

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

答案 2 :(得分:1)

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

^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