RegEx - 从匹配中排除char序列

Pet*_*ann 2 java regex

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

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

^[ \t]*//[^a-z]+?$
Run Code Online (Sandbox Code Playgroud)

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

// PN-123456 
// ITK 12345
//IT-12345
Run Code Online (Sandbox Code Playgroud)

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

  1. 可选的空格
  2. "PN"或"IT"或"ITK"
  3. 连字符,空白或什么都没有
  4. 四到六位数
  5. 可选的空格

这是我对这种模式的处理方法:

[ ]?PN[ -]?[0-9]{1,6}
Run Code Online (Sandbox Code Playgroud)

但现在我无法在一个RegEx中将两个表达式联合起来.这怎么样?

TIA,彼得

Kob*_*obi 7

你想要一个负面的预测:

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

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

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