我一直在用这个/\(\s*([^)]+?)\s*\)/
正则表达式使用 PHP preg_replace 函数删除外括号(在我上一个问题中了解更多信息正则表达式匹配除尾随空格之外的任何字符 https://stackoverflow.com/questions/10765699/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)
EDIT:
我想继续修剪已删除括号内的尾随空格。
您可以使用这个基于递归正则表达式的代码,该代码也适用于嵌套括号。唯一的条件是括号应该平衡。
$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) . "\n";
OUTPUT:
'Foo ( test1 test2 )' => 'Foo test1 test2'
'Bar ( test1 t3() test2 )' => 'Bar test1 t3() test2'
'Baz ((("Fdsfds")))' => 'Baz (("Fdsfds"))'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)