RegEx比我讨价还价更多

时间:2012-10-01 12:48:24

标签: regex regex-negation

我有这个正则表达式: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'
  4. 但我觉得它也匹配CMD[1-8][1-0]我无法弄清楚我做错了什么。

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

1 个答案:

答案 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])