2013-05-29 30 views
4

我一直在撞牆上的這一塊,我對正則表達式相當陌生,有點出於我的深度。我正在使用此網絡合規性軟件,該軟件不允許在字段中匹配多個條件,但不接受正則表達式。負面看字

!(?!.*FastEthernet[0-24].[0-24]\.[0-250]) 

軟件分析所有信息,直到其表達的標準相匹配。所以在我的情況下,我希望它匹配!,除非它後跟一個子接口FastEthernet#/#.#其中#是任何數字。

這裏是我的數據

interface FastEthernet0/0 
shutdown 
! 
interface FastEthernet0/0.100 
ip address 192.168.1.100 
! 
interface FastEthernet0/1 
shutdown 
! 
+0

在正則表達式中使用'。*'非常非常小心。 '。*'匹配一切。 '。*?'是比較安全的,但即使這樣也很危險。如果可以的話,總是嘗試製作一個不包含'。*'的正則表達式。 – Joe

+0

你想在你的例子中只匹配最後一個'!'嗎? – Jerry

+0

我的目標是匹配第二! – Luky

回答

2

這應做到:

!(?!\s*interface FastEthernet\d/\d\.\d) 

查看rubular

+0

如果你不介意我問,'(?s)'部分會做什麼? – mart1n

+0

@ mart1n它允許'.'匹配換行符(它通常不會被允許),但在這種特殊情況下它不應該是必需的。 –

+0

在這種情況下,你的表達式不應該匹配'!'後面的(可選)新行嗎?另外,你可能應該逃避'.'和'/'。 – mart1n

2

這個運行我會用這樣的:

!(?!(.|\n|\r)*FastEthernet\d\d?\/\d\d?\.\d{1,3}) 

似乎到work for me

+0

@Luky我刪除了'(?s)'。你可以試試這個嗎? – Jerry

+0

感謝您的幫助,但它似乎是軟件的問題,所以我無法確定它是否有效。 – Luky

+0

@Luky聽起來像terribad問題然後:(我希望你能儘快整理! – Jerry