2012-10-27 21 views
2

(AEF01?/.*|.*/FC070?/.*).*會發現需要匹配,但是從列表中排除

AEF01/AL020/na/na/na 

ABB03/FC070/na/na/na 

但不

ANB00/FF030/na/na/na 

但我想它倒過來 - 我想它看第一列,忽略任何AEF01代碼,但拿起該列中的其他內容,並看看第二列,並忽略FC070,但拿起別的東西。 AEF01FC070可能不總是一起出現。

我試過[^](?!)(?<!)都無濟於事。 我很勉強地解決這個問題,因爲我的項目沒有這個表達就停滯不前。

+0

你能否澄清一點? –

回答

0

我建議你使用正則表達式

((?<=^)(?!AEF01)[A-Z0-9]{5}(?=\/)|(?<=^[A-Z0-9]{5}\/)(?!FC070)[A-Z0-9]{5}(?=\/|$)) 
+0

'^'和'(?<= ^)'有什麼區別? –

+0

@ m.buettner - Nothing,just beauty :)這種方式'(.. | ..)'模式的兩個部分使用相同的邏輯,因爲它們具有向後看和向前看。 –

+0

我認爲你是匹配錯誤的比特雖然。當我閱讀它時,他想匹配所有的行,但在符合'AEF01'和'FC070'的行中他想刪除這些列。這需要通過捕獲組和/或替換當然來完成;)。 –

0

較短方式:

^(?!AEF01/)\w+/(?!FC070/)\w+/.*$ 

如果您需要排除下劃線,你將需要改變\w[A-Z0-9]

測試中Sublime Text 2使用Boost正則表達式語法