2

有没有比在括号周围格式化空格更好,更有效的方法?是否可以在 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)c和 转换a( b )c为。a ( b)ca (b) c

4

2 回答 2

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);
于 2013-07-05T15:20:47.033 回答
0

使用[...]一套。

以下是否不够(不配对)?

$string = preg_replace('#\s*([\[\{\(«“])\s*#u', ' \1', $string);
$string = preg_replace('#\s*([\]\}\)»”])\s*#u', '\1 ', $string);
于 2013-07-05T15:31:36.410 回答