OK,正則表達式匹配嵌套的括號
我不知道是否有可能寫這個正則表達式,所以我要通過askign幫忙開始 - 到目前爲止,我還沒有成功。
源串:
,convert(varchar(8000), lt.text) as reason
所需的匹配:
convert(varchar(8000), lt.text)
假設
- 語句用逗號開始(外括號的)
- 狀態將與結束「作爲「
這是正則表達式我開始有:
\(.+\)
謝謝以下的正則表達式
OK,正則表達式匹配嵌套的括號
我不知道是否有可能寫這個正則表達式,所以我要通過askign幫忙開始 - 到目前爲止,我還沒有成功。
源串:
,convert(varchar(8000), lt.text) as reason
所需的匹配:
convert(varchar(8000), lt.text)
假設
這是正則表達式我開始有:
\(.+\)
謝謝以下的正則表達式
Bar Kiers - 是正確的,無法應付「與任意數量的嵌套」,是我記憶爲什麼和爲什麼我無法完成我想要的原因的根本原因。
HACK ALERT:我通過抓取最內側的實例,並用一個佔位符代替它,然後遞歸處理,直到沒有更多的匹配解決......
用途:
^\(? <小鬼> [\ S \ S] *?)作爲
^,(.+\)) as [a-z]+$
我包括 「原因」 與[A-Z] +。
我建議你使用RightToLeft選項,如果你有它。它會加快正則表達式。如果您的語言需要,請記住要逃脫\
。
我在這裏假設PCRE語法。如果你能保證這兩個形象「爲」不要在括號內顯示出來,這樣的事情應該工作:
{,(.*) as }
如果你不能保證「爲」不會在括號顯示,您需要定義一些將會遇到的其他條件。例如,如果線路經過「爲」永遠結束,像這樣的工作:
{,(.*) as \S+$}
或者你可以使用一個真正的解析器,它可以保持不同情境下(括號的數量)。
什麼是你的平臺? .NET正則表達式有一個「平衡分組」的結構,可以讓你做到這一點(儘管如果你擔心這些,你仍然需要處理逃脫的parens,在一個單獨的通行證中)。 – harpo 2011-03-22 16:37:31
JAVA - 我認爲這是被限制的parens殺死我。我似乎記得這並不容易,甚至可能 - 但我沒有寫出一百萬年的正則表達式。 – akaphenom 2011-03-22 16:40:47
「純粹的」正則表達式是不可能的,因爲很多人會告訴你。但我已經使用了正則表達式擴展只是爲了這個目的,這很好。 – harpo 2011-03-22 16:50:24