删除圆括号之间的所有内容

时间:2013-12-20 05:36:19

标签: php regex

如何删除圆括号之间的所有内容?

我这个段落里面有多个括号。

Albert Einstein (/ˈælbərt ˈaɪnstaɪn/; {German} [ˈalbɐt ˈaɪnʃtaɪn] ( listen); 14 March 1879 – 18 April 1955) was a German-born theoretical physicist.

我试过了:

        $text = preg_replace("/\([^)]+\)/",' ',$text);
        $text = preg_replace('/\[.*?\]/', ' ', $text);

输出是这样的:

Albert Einstein ; 14 March 1879 18 April 1955) was a German born theoretical physicist.

我想删除里面的所有内容并将其输出。

 Albert Einstein was a German born theoretical physicist

1 个答案:

答案 0 :(得分:1)

您可以在PHP中使用递归正则表达式:

(\((?:[^()]+|(?1))+\))\s*

第一个捕获组有:\((?:[^()]+|(?1))+\)

在parens中,您有(?:[^()]+|(?1))+,因此您有[^()]+作为第一个选项,或者(?1)指的是第一个捕获组,这意味着您可以拥有相同的组parens,这是递归部分。

然后\s*外面只是删除额外的空格(如果有的话)。如果你把一个放在前面并用一个空格替换,实际上可能会更好,但理想的是在我相信的第一次替换后删除任何双倍空间。

regex101 demo