我想使用reg_split从斜杠的最后一次出现中分解字符串。
因此输入'/some/string/foo/bar/13'
将变为['/some/string/foo/bar', 13]
我知道我可以使用preg_split("/\//", $input);
,但这会分成一个大小为6且包含所有字符串的数组。
我也可以像preg_match
那样匹配我想要的每个部分:
$match = [];
$value = $page->value;
preg_match("/.*[^\d]/", $value, $match);
$base = $match[0]; // => 13
$match = [];
preg_match("/[^\/]+$/", $value, $match);
$numbers[] = $match[0]; // => /some/string/foo/bar
然而,如何使用preg_split
将其转换为oneline?当我尝试应用这些preg_match
模式时,我得到一个大小为2的数组,但只有它匹配的值,而不是两者。
答案 0 :(得分:1)
使用积极的前瞻。
preg_split('~/(?=[^/]*$)~', $input);
或
否定前瞻。
preg_split('~/(?!.*/)~', $input);
答案 1 :(得分:0)
作为Avi的补充答案,如果你想匹配和捕获(而不是拆分),你也可以使用这样的正则表达式:
(.*/)(.*)
<强> Working demo 强>
Php代码
$re = "@(.*/)(.*)@";
$str = "/some/string/foo/bar/13";
preg_match_all($re, $str, $matches);
匹配信息
MATCH 1
1. [0-21] `/some/string/foo/bar/`
2. [21-23] `13`
答案 2 :(得分:0)
你也可以这样做:
$str = '/some/string/foo/bar/13';
if (false !== $slashPos = strrpos($str, '/')) {
$result = [substr($str, 0, $slashPos), substr($str, $slashPos + 1)];
print_r($result);
}
或:
$parts = explode('/', $str);
$last = array_pop($parts);
$result = [implode('/', $parts), $last];
答案 3 :(得分:0)
不是真正的oneliner,但不需要正则表达式!
$input = '/some/string/foo/bar/13';
$slash_position = strrpos($input, '/');
$result = array(substr($input, 0, $slash_position), substr($input, $slash_position+1));
结果:Array ( [0] => /some/string/foo/bar [1] => 13 )