这是我的正则表达式:
((GO)( [A-Z])+)
我希望每个字母最多只出现一次,但不幸的是,它没有正常工作,因为输入如下:
GO A B C C
返回值应该为false,但实际上返回了true。
您的正则表达式是:
GO(?:([A-Z])(?!.*\1))+$
GO
,后跟:$
) 之前,该字符不会与任何 (.
) 后续字符匹配。最后一步的关键是使用零长度负向先行断言:(?!.*\1)
^GO (?:([A-Z])(?!.*\1)\s*)*$
它将匹配以下任何内容:
GO<空格>
开头[A-Z]
),可以由任何空白字符序列分隔,但:在regex101上使用它!
样例匹配情况:
GO A B C
GO ABC
GO A B C G O
样例不匹配情况:
A B C
GO A A A
GO ABC
是否应该作为匹配情况之一(只是根据 OP 的正则表达式和示例猜测)。 - Pshemo