正则表达式匹配[]和()并替换它

时间:2014-07-01 19:42:28

标签: php regex

我有以下文字,希望删除括号[]()之间的所有内容。

  

班加罗尔(BengalÅ«ru,[ËbeÅ<É¡É™ÉuËɾu](听))也被称为   班加罗尔是印度第三大城市,也是印度的中心   印度第五大都市区。位于印度南部   德干高原,它是印度南部的首府   卡纳塔克邦。班加罗尔被称为“印度硅谷”,因为   作为国家领先的信息技术(IT)的角色   出口。[5] [6] [7]位于3000英尺(914.4米)的高度   班加罗尔以其宜人的气候而闻名于海平面   全年。它是印度最高的地铁城市。[8]城市   是该市十大首选企业之一   世界。[9]

正规我正在尝试但不起作用

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

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

如何从上述段落中删除这些内容?

1 个答案:

答案 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 ')'

Regex101 demo