2014-07-01 33 views
0

我有以下文本,並且想要移除括號[]()之間的所有內容。正則表達式來匹配[]和()並將其替換爲

班加羅爾(BengalÅ«RU,[ËbeÅ<É¡É™ÉuËɾu](聽)),也被稱爲 班加羅爾是印度的第三大城市,是 印度第五大都市圈的中心。位於印度南部的德爾坎高原 ,它是印度南部邦首府 卡納塔克邦。班加羅爾被稱爲「印度硅谷」,因爲其作爲全國領先的信息技術(IT) 出口商的角色 。[5] [6] [7]班加羅爾位於海拔高度超過3000英尺(914.4米) ,以其宜人的氣候 全年聞名。它是印度最高的地鐵城市。[8]該城市 是 世界中十大優選企業之一。[9]

正則表達式正在嘗試,但不工作

#\[\(.+?)\]#s 

#\(\(.+?)\)#s 

我怎麼能刪除從以上對那些內容?

回答

6

由於文本包含嵌套括號,因此您需要遞歸解決方案。幸運的是,PCRE支持遞歸,所以這很容易。

下面的正則表達式應該做的伎倆:

\[([^\[\]]|(?R))*]|\(([^()]|(?R))*\) 

它主要由兩個部分組成 - 一個簡單的支架((...))內一切配套,以及一個用於在方括號一切([...])匹配。

正則表達式屍檢:

\[   # match '[' 
(   # start group 1 
[^\[\]]  # match any character except '[' and ']' 
|   # OR 
(?R)   # recursively match the entire pattern 
)*   # repeat zero or more times 
]    # match ']' 

|    # OR 

\(   # match '(' 
(   # start group 2 
[^()]  # match any character except '(' and ')' 
|   # OR 
(?R)   # recursively match the entire pattern 
)*   # repeat zero or more times 
\)   # match ')' 

Regex101 demo

+1

這會嗆的嵌套的括號。 – cmbuckley

+0

@cbuckley:更新。 –

+1

+1。遺憾的是沒有很好的方法來組合遞歸模式:-) – cmbuckley

相關問題