我有这个正则表达式:CMD?(S?[1-8][0-1]|R?[1-8]|[qQ])
它应符合以下情况:
所有案件都应以“CMD”开头
后跟:
但我觉得它也匹配CMD[1-8][1-0]
我无法弄清楚我做错了什么。
最后,除了这些情况外,我应该怎样做才能获得正则表达式匹配,因为我无法找到否定该声明的解决方案。
答案 0 :(得分:2)
你似乎混淆了?
的含义,实际上意味着“0或1前面的字符”。这就是为什么你在没有S
的情况下获得比赛。
你正在寻找的正则表达式是:
CMD(S[1-8][01]|R[1-8]|[qQ])
修改强>
对不起,我错过了你问题的后半部分。
这取决于您使用的实施方式。例如,在Perl中,它就像编写!~
而不是=~
一样简单。否则,您可以使用所谓的“负前瞻断言”。假设您仍然希望否定系列以CMD
开头:
CMD(?!S[1-8][01]|R[1-8]|[qQ])