代码之家  ›  专栏  ›  技术社区  ›  Kirill

爪哇。正则表达式。如何不与和混合?

  •  2
  • Kirill  · 技术社区  · 7 年前

    我有一个这样的字符串(VIN):

    String vin = "XTC53229R71133923";
    

    我可以使用或查看是否有字符q、o、i:

    String regExp = ".*[QOI].*";
    

    这是可行的。

    但是,我不能检查这3个字母中是否有任何一个不在字符串中。

    我尝试了负面展望:

    String regExp = "(?!.*[QOI].*)";
    

    这不管用。在“XTC5”中 Q 3229R71133923“返回 .

    这个 主要的 问题 -我有两个条件:

    1. 字符串中的字符数(A-Z0-9)应为17。
    2. 字符串不应该有q,o,i。

    我可以用2个regexps检查:

    1. String regExp = "^([A-Z0-9]{17})$"; //should be true
    2. String regExp = ".*[QOI].*"; //should be false

    但是有办法吗 结合 这两张支票 在一个正则表达式中 ?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Alex Savitsky    7 年前

    只使用不包含您不需要的字符的自定义范围如何?

    String regexp = "^([A-HJ-NPR-Z0-9]{17})$";
    
        2
  •  3
  •   Leo Aso    7 年前

    干得好 ^[^QOI]{17}$ . 用^开始character类意味着“不匹配任何这些字符”。