有没有更好更有效的方法来格式化括号周围的空格?可以在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) c
,a(b)c
,a( b )c
和a ( b)c
至a (b) c
。
答案 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);