首页 > 解决方案 > PHP preg_split 按组 1 拆分

问题描述

我有这些输入:

Rosemary Hess (2018) (Germany) (all media)
Jackie H Spriggs (catering)

我想用第一个括号将它们分开,我想要的输出:

array:2 [
  0 => "Rosemary Hess"
  1 => "(2018) (Germany) (all media)"
]

array:2 [
  0 => "Jackie H Spriggs"
  1 => "(catering)"
]

我尝试了这些但无法正常工作:

preg_split("/(\s)\(/", 'Rosemary Hess (2018) (Germany) (all media)')

但它用括号分割每个空格并返回五个项目而不是两个。

标签: phpregex

解决方案


您可以使用

$strs= ["Rosemary Hess (2018) (Germany) (all media)", "Jackie H Spriggs (catering)"];
foreach ($strs as $s){
    print_r( preg_split('~\s*(?=\([^()]*\))~', $s, 2) );
}
// => Array ( [0] => Rosemary Hess [1] => (2018) (Germany) (all media) )
// => Array ( [0] => Jackie H Spriggs [1] => (catering) )

请参阅PHP 演示。请参阅正则表达式演示

第三preg_split$limit参数设置为2使其与匹配的模式的第一次出现分割字符串:

  • \s*- 0+ 个空格
  • (?=\([^()]*\))- 后跟(, 0 个或多个字符,而不是(and)然后是 a )

推荐阅读