【发布时间】:2014-10-17 21:46:48
【问题描述】:
这是我的正则表达式:
((GO)( [A-Z])+)
我希望每个字母最多出现一次,不幸的是它不能正常工作,因为这个输入:
GO A B C C
返回 true,但应该返回 false。
【问题讨论】:
-
感谢您的快速回复。我决定使用@anubhava 解决方案。我需要字母之间的空间。
这是我的正则表达式:
((GO)( [A-Z])+)
我希望每个字母最多出现一次,不幸的是它不能正常工作,因为这个输入:
GO A B C C
返回 true,但应该返回 false。
【问题讨论】:
【讨论】:
你的正则表达式是:
GO(?:([A-Z])(?!.*\1))+$
GO,后跟:$) 之前不匹配任何 (.) 后续字符。 最后一步的关键是zero-length negative lookahead:(?!.*\1)
【讨论】:
您可以使用以下正则表达式:
^GO (?:([A-Z])(?!.*\1)\s*)*$
它将匹配以下任何内容:
GO<space>开头
[A-Z]):
示例匹配案例:
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 ;)