2014-02-16 61 views
2

鑑於一些文字我想刪除包裹{}之間的所有文本。該塊本身可能包含一些塊。我怎樣才能使用PCRE正則表達式?去除第一級模塊

\\example input: 
{a}b{c{d}}e{f{g}h} 

\\output: 
be 

回答

3

使用regular expression recursion

\{(?>[^{}]|(?R))*\} 

a regex101 demo


PHP例子:

$input = '{a}b{c{d}}e{f{g}h}'; 
$output = preg_replace('/\{(?>[^{}]|(?R))*\}/', '', $input); 
echo($output); # => be 
+0

記住我,你總是超越我?! –

+0

@AmitJoki,如果您有更好的解決方案,請發表解答。 – falsetru

+0

nah!,當你的答案來臨時試圖匹配。要接受它,你是一個相當不錯的正則表達式 –