2012-06-21 42 views
2

我很喜歡RegEx,希望能在這裏找到一些指導。我已經在這裏和谷歌上進行了搜索,但我很難找到正確的條款。我可以想象,非捕獲組織會幫助我,但我不知道如何應用它們。正則表達式 - 從匹配中排除字符序列

基本上我想找到的Java單行註釋,這是 「尖叫」(沒有小寫字母):

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

現在我也覺得這樣的評論:

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

這些意見是有效我,所以我想排除它們從正則表達式以上。它總是這樣的模式:

  1. 可選空白
  2. 「PN」 或 「IT」 或 「ITK」
  3. 連字符,空格或沒有
  4. 四到六位數字
  5. 可選空白

這是我的這種模式的方法:

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

但現在我不能將這兩個表達式統一在一個RegEx中。這將如何工作?

TIA, 彼得

回答

7

你想要一個negative lookahead

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

注意[^a-z]+要求會有沒有小寫字母,但不完全一樣「只有大寫」。例如,它會趕上評論// ----------,甚至一個空//(只要有一個空格)。

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

+0

就是這樣,完美!是的,我也想包括「無意義評論」,例如,是空的等等。請允許我調整您的提案以完全符合我提供的示例(負面預測應包含「//」)。不過,那很好。非常感謝:-)我會看看未來使用的預見主題。 –

+0

@Peter - 我只是測試它,並添加了''// - 它可以先行去之前(也可以是'\ S * //',當然)。謝謝! – Kobi

+0

大力支持,謝謝:-) –