PHP正则表达式/分隔符

时间:2016-05-27 18:32:53

标签: php regex preg-split

我有一个字符串"/test:n(0-2)/div/",我希望通过Regex将其拆分为一个函数为preg_split()的数组。输出应该是这样的:

output = {
[0]=>"test:n(0-2)"
[1]=>"div"
}

然而,似乎并没有像我想象的那么容易。以下是我的尝试:https://regex101.com/r/iP2lD8/1

$re = '/\/.*\//';
$str = '/test:n(0-2)/div/';
$subst = '';

$result = preg_replace($re, $subst, $str, 1);

echo "The result of the substitution is ".$result;
  

全场比赛0-17:
  /测试:N(0-2)/ DIV /

我做错了什么?

2 个答案:

答案 0 :(得分:4)

只需使用explode()

$result = array_filter(explode('/', $string));

array_filter()从两端/移除空箱。或者你可以trim()

$result = explode('/', trim($string, '/'));

但是要回答这个问题,您只需使用/作为preg_split()的模式,并在/中转义/\//或使用不同的分隔符:

$result = array_filter(preg_split('#/#', $string));

另一种方式取决于您的需求和字符串内容的复杂性:

preg_match_all('#/([^/]+)#', $string, $result);
print_r($result[1]);

$result[0]是完整匹配数组,$result[1]是第一个捕获组()的数组。如果有更多捕获组,则$result中将包含更多数组元素。

答案 1 :(得分:0)

您可以使用

'~/([^/]+)~'

请参阅regex demo。此模式与/匹配,然后在第1组中捕获除/以外的1个或多个字符。

你遇到的问题是消耗了尾随斜杠。此外,你使用贪婪匹配,只是抓了太多。

Ideone demo

$re = '~/([^/]+)~'; 
$str = "/test:n(0-2)/div/"; 
preg_match_all($re, $str, $matches);
print_r($matches[1]);
// => Array  ( [0] => test:n(0-2) [1] => div  )