2014-07-17 69 views
1

我有這個目前在C#憋屈正則表達式

([\w\-"]+)[ ]+OBJECT-TYPE[^[::=]*]*::=[ ]*\{[ ]*([\w\-"]+) ([\w\-"]+) 

它能做什麼是搜索這樣的東西:

DATA1 OBJECT-TYPE 
SYNTAX SEQUENCE OF ContactInfoEntry 
MAX-ACCESS not-accessible 
STATUS current 
DESCRIPTION 
"A table containing Contact Info information" 
::= { DATA2 DATA3 } 

我只是說想我固定

一個問題
OBJECT-TYPE[^[::=]*]*::= 

這是爲了搜索字符串「OBJECT-TYPE」後不是「:: =」的任何字符,直到它找到「:: =」這個工作直到我注意到

[^[::=]*]* 

actualy意思是:或=而不是excact字符串「:: =」所以我該如何解決這個問題?

編輯:如果有人還在這裏,這樣我不需要打開另一個問題,我怎麼忽略了兩者之間的任何和所有的字符,符號,數字等「
例:
不要忽略這個」忽略一切,是在這裏」不要再忽略‘再次忽略’等

回答

2

可以在這種結構中使用negative lookahead

(?:(?!::=).)* 

要匹配任意字符,除了::=


順便提一句,除了[^[::=]*]*[:=]然後0以上]將匹配任何字符(多個)。


對於第二部分,你可以使用這樣的事情,有一些應用簡化:

([\w"-]+)[ ]+OBJECT-TYPE(?:"[^"]*"|(?!::=).)*::=[ ]*{[ ]*([\w"-]+) ([\w"-]+) 
+0

無賴,讀取錯誤的笑。謝謝! – Jerry

+0

是否沒有其他選擇?我不喜歡它們在大型文件和很多文件上佔用很多CPU的能力, – Vajura

+0

@Vajura我也不太喜歡它們,但是不,如果使用否定類,它會複雜得多。你可能會搜索'替代負向預測',我得到的第一個是[this](http://stackoverflow.com/a/1537425/1578604)。 – Jerry

0

嘗試用(:| =),這將挑選一個或另一個。不知道你是否需要轉義:或=雖然。

0

你可以試試負lookarounds:

^((?!::=).)*