preg_split和多个分隔符

时间:2014-11-28 00:25:04

标签: php regex preg-split

测试字符串

1-gc-communications/edit/profile_picture

首先让我说第一个-之前的第一个数字是我需要提取的ID。从第一个-到第一个/将是'名称'我需要提取。之后的一切我都不在乎。所以我要找的是一个例子:

Array ( [0] => 1 [1] => gc-communications [2] => /edit/profile_picture )

我能想到的最好的是以下模式(以及他们的结果 - 限制为3)

模式:/-|edit\/profile_picture/结果:Array ( [0] => 1 [1] => gc [2] => communications/edit/profile_picture )

^这个有缺陷,因为它同时破灭。

模式:/~-~|edit\/profile_picture/结果:Array ( [0] => 1-gc-communications/ [1] => )

^重大失败。

我知道我可以做2个限制,然后在第一个/上休息,然后在结果数组上执行preg_split,但我希望能用一条线来完成这项工作。< / p>

提前致谢!

如果这是禁止的话,我会向其他人打开一个班轮&#34;的解决方案。


工作代码。谢谢!

preg_split("#([^-]+)-([^/]+)/(.*)#", "1-gc-communications/edit/profile_picture",-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)

结果

Array ( [0] => 1 [1] => gc-communications [2] => edit/profile_picture )

1 个答案:

答案 0 :(得分:2)

试试这个

$str = '1-gc-communications/edit/profile_picture';
$match = preg_split('#([^-]+)-([^/]+)/(.*)#', $str, 0, PREG_SPLIT_DELIM_CAPTURE);    
print_r($match);

一样返回
 array (
    0 => '',
    1 => '1',
    2 => 'gc-communications',
    3 => 'edit/profile_picture',
    4 => '',
  )