我有以下文字,希望删除括号[]
和()
之间的所有内容。
班加罗尔(BengalÅ«ru,[ËbeÅ<É¡É™ÉuËɾu](听))也被称为 班加罗尔是印度第三大城市,也是印度的中心 印度第五大都市区。位于印度南部 德干高原,它是印度南部的首府 卡纳塔克邦。班加罗尔被称为“印度硅谷”,因为 作为国家领先的信息技术(IT)的角色 出口。[5] [6] [7]位于3000英尺(914.4米)的高度 班加罗尔以其宜人的气候而闻名于海平面 全年。它是印度最高的地铁城市。[8]城市 是该市十大首选企业之一 世界。[9]
正规我正在尝试但不起作用
#\[\(.+?)\]#s
和
#\(\(.+?)\)#s
如何从上述段落中删除这些内容?
答案 0 :(得分: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 ')'