Regex将移除外括号
我一直使用此/(s*([^)]+?)s*)/
正则表达式通过PHP preg_place函数删除外方括号(请参阅我上一个问题Regex to match any character except trailing spaces中的更多内容)。
这在只有一对括号时可以很好地工作,但问题是当有更多对括号时,例如,( test1 t3() test2)
变成test1 t3( test2)
,而不是test1 t3() test2
。
我知道正则表达式的限制,但如果有多对括号,我可以将其设置为不匹配任何内容,那就太好了。
所以,示例行为就足够了:
( test1 test2 )
=>test1 test2
( test1 t3() test2 )
=>(test1 t3() test2)
编辑:
我希望保持修剪已删除括号内的尾随空格。
解决方案
您可以使用这个基于递归正则表达式的代码,它也可以使用嵌套的方括号。唯一的条件是括号应该是平衡的。
$arr = array('Foo ( test1 test2 )', 'Bar ( test1 t3() test2 )', 'Baz ((("Fdsfds")))');
foreach($arr as $str)
echo "'$str' => " .
preg_replace('/ ( s* ( ( [^()]*? | (?R) )* ) s* ) /x', '$1', $str) . "
";
输出:
'Foo ( test1 test2 )' => 'Foo test1 test2'
'Bar ( test1 t3() test2 )' => 'Bar test1 t3() test2'
'Baz ((("Fdsfds")))' => 'Baz (("Fdsfds"))'
相关文章