2011-11-12 119 views
0

可能重複:
Regex - nested patterns - within outer pattern but exclude inner pattern如何檢查是否在括號中的正則表達式

我試圖讓後/串從字的字符串。但我希望這個詞不在括號內。例如:

something (theword other things) theword some more stuff應該給我theword some more stuff而不是theword other things) theword more stuff。我如何在正則表達式中做到這一點。我使用PCRE(例如PHP,Python的正則表達式引擎)

編輯:

我想使用這個正則表達式的字符串是一個MySQL聲明。我試圖刪除部分,直到FROM部分,但內部的SQL語句(在括號中導致問題給我)。

+0

請問'FOO \(棒\ )baz'算作括號還是隻是'foo(bar)baz'? – Regexident

+0

我確信我的括號不會被轉義。 – yasar

回答

0

這類似於在這個問題上所描述的任務:Regex - nested patterns - within outer pattern but exclude inner pattern

看我爲它爲什麼不是100%,可能和該作品的時代最一劈上下的解復(淺築巢,那是)。

更新:

如果你知道括號西港島線既不能嵌套,也沒有逃脫,你可以用這個東西類似於:

(?<=\)|^)([^()]+)(?=\(|$) 

所以用這個作爲草堆:

something (theword other things) theword (some) more stuff 

你會以捕獲組1中的這些片斷結尾:

something 
theword 
more stuff 

請注意,有前/後拍攝的,以及空間,以防止他們用這個來代替:

(?<=\)|^)\s*([^()]+)\s*(?=\(|$) 

同樣的正則表達式,但評論:

(?<=\)|^) #either ")" or beginning of string 
\s* #optional leading whitespace 
([^()]+) #any sequence of characters but "(" or ")" 
\s* #optional trailing whitespace 
(?=\(|$) #either "(" or end of string 
+0

我相信我的模式不會使用嵌套括號。我編輯了我的第一篇文章。 – yasar

+0

嵌套parens不是問題。你只是做錯了。 – tchrist

+0

@tchrist:很想看到更好的解決方案,介意張貼一個? – Regexident