2010-01-25 96 views
0

^\s*[)]*\s*$^\s*[(]*\s*$與粗體的圓括號()相符。也就是說,我是什麼想的忽略是單身,而不是(條件1)括號內括號:如何匹配Perl中的某些嵌套圓括號?

while 
    ( #matches here 
    ( #matches here 
     (condition1) && (condition2) && 
     condition3 
    ) || 
    (#matches here 
     (condition4) || 
     condition5 && 
     (condition6) 
    ) #matches here 

) #matches here 

但如果我有這樣的不匹配:

while 
((#does not match here 
     (condition1) && (condition2) && 
     condition3 
    ) || 
    (
     (condition4) || 
     condition5 && 
     (condition6) 
    )) #does not match here 

while 
(((#does not match here 
     (condition1) && (condition2) && 
     condition3 
    )) || 
    (( #does not match here 
     (condition4) || 
     condition5 && 
     (condition6) 
    ))) #does not match here 

如何匹配所有單個括號?

+0

請給我們一些數據! – 2010-01-25 11:41:57

+0

所以基本上你想匹配所有的括號,除了最內層的那個,我說得對嗎? – Amarghosh 2010-01-25 11:43:00

+3

你應該真的使用解析器。正則表達式不能用於表達非常規語言,如你的。 – Gumbo 2010-01-25 11:44:13

回答

5

我個人建議您使用一個簡單的棧來計算開放和閉括號,而不是在正則表達式之間跳過。

+1

另外,需要普通的解析器,而不僅僅是支架計數器。 – stroncium 2010-01-25 11:14:44

+1

不*真的*如果你不關心引用/轉義括號。你只需要一個簡單的堆棧和計數器。 – 2010-01-25 11:37:19