1

我有这个正则表达式:CMD?(S?[1-8][0-1]|R?[1-8]|[qQ])

它应该匹配这些情况:

所有情况都应以“CMD”开头

其次是:

  1. 'S' 后跟
    1. [1-8] 后跟
    2. [0-1]
  2. 'R' 后跟
    1. [1-8]
  3. “q”或“Q”

但我发现它也匹配CMD[1-8][1-0]我无法弄清楚我做错了什么。

最后,除了这些情况外,我应该怎么做才能获得正则表达式匹配,因为我找不到否定该声明的解决方案。

4

1 回答 1

2

您似乎混淆了 的含义?,它实际上表示“前面字符的 0 或 1”。这就是为什么你在没有S.

您正在寻找的正则表达式是:

CMD(S[1-8][01]|R[1-8]|[qQ])

编辑:

对不起,我错过了你问题的后半部分。

这取决于您使用的是什么实现。例如,在 Perl 中,它就像编写!~而不是=~. 否则,您可以使用所谓的“否定前瞻断言”。假设您仍然希望否定系列以 a 开头CMD

CMD(?!S[1-8][01]|R[1-8]|[qQ])
于 2012-10-01T12:52:14.463 回答