我有一个字符串"/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 /
我做错了什么?
答案 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个或多个字符。
你遇到的问题是消耗了尾随斜杠。此外,你使用贪婪匹配,只是抓了太多。
$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 )