RegEx - 从匹配中排除char序列

时间:2012-06-21 10:25:15

标签: java regex

我正在使用RegEx,并希望在这里找到一些指导。我已经在这里和Google上搜索过,但我很难找到合适的条款。我可以想象非捕获组会帮助我,但我不知道如何应用它们。

基本上我想找到Java单行评论,这是“尖叫”(不是小写字母):

^[ \t]*//[^a-z]+?$

现在我也找到这样的评论:

// PN-123456 
// ITK 12345
//IT-12345

这些评论对我有效,所以我想将它们从上面的RegEx中排除。它始终是这种模式:

  1. 可选空格
  2. “PN”或“IT”或“ITK”
  3. 连字符,空格或空白
  4. 四到六位数
  5. 可选空格
  6. 这是我对这种模式的处理方法:

    [ ]?PN[ -]?[0-9]{1,6}
    

    但是现在我无法在一个RegEx中将两个表达式联合起来。这将如何运作?

    TIA, 彼得

1 个答案:

答案 0 :(得分:7)

您需要negative lookahead

^//(?!\s*(?:PN|ITK?)[ -]?[0-9]{1,6}[ ]*$)[^a-z]+?$

请注意[^a-z]+要求不会有小写字母,但与“仅大写”不完全相同。例如,它会捕获评论// ----------,甚至是空//(只要有空格)。

示例:http://regexr.com?31app