删除括号外的文本

3 php regex preg-replace

$text = 'remove this text (keep this text and 123)';

echo preg_replace('', '', $text);
Run Code Online (Sandbox Code Playgroud)

它应该输出:

(keep this text and 123)
Run Code Online (Sandbox Code Playgroud)

rid*_*ner 5

这样做:(并且也适用于嵌套())

$re = '/[^()]*+(\((?:[^()]++|(?1))*\))[^()]*+/';
$text = preg_replace($re, '$1', $text);
Run Code Online (Sandbox Code Playgroud)

以下是几个测试用例:

Input:
Non-nested case: 'remove1 (keep1) remove2 (keep2) remove3'
Nested case:     'remove1 ((keep1) keep2 (keep3)) remove2'

Output:
Non-nested case: '(keep1)(keep2)'
Nested case:     '(keep1) keep2 (keep3)'
Run Code Online (Sandbox Code Playgroud)