格式化括号

时间:2013-07-05 15:16:06

标签: php regex

有没有更好更有效的方法来格式化括号周围的空格?可以在RegEx上合并以下内容吗?

$string = '(dd       ) ads          [d]';
$string = preg_replace([
        '#\s*(“)\s*([^”]+?)\s*?(”)\s*#u',
        '#\s*(«)\s*([^»]+?)\s*?(»)\s*#u',
        '#\s*(\()\s*([^)]+?)\s*?(\))\s*#u',
        '#\s*(\{)\s*([^}]+?)\s*?(\})\s*#u',
        '#\s*(\[)\s*([^\]]+?)\s*?(\])\s*#u',
    ],
    ' \1\2\3 ', $string);
echo trim($string); //(dd) ads [d]

它会将以下内容转换为a (b) ca(b)ca( b )ca ( b)ca (b) c

2 个答案:

答案 0 :(得分:0)

您可以使用单个表达式:

$string = preg_replace('#\s*(?:(\[)\s*([^]]+?)\s*?(\])|' .
                              '(\{)\s*([^}]+?)\s*?(\})|' .
                              '(\()\s*([^)]+?)\s*?(\))|' .
                              '(«)\s*([^»]+?)\s*?(»)|' .
                              '(“)\s*([^”]+?)\s*?(”))\s*#u', 
                       ' \1\2\3\4\5\6\7\8\9\10\11\12 ', $string);

答案 1 :(得分:0)

使用[...]集。

如果以下不足够(没有配对)?

$string = preg_replace('#\s*([\[\{\(«“])\s*#u', ' \1', $string);
$string = preg_replace('#\s*([\]\}\)»”])\s*#u', '\1 ', $string);