2015-09-03 22 views
0

我想使用reg_split從上一次出現的斜線中分解出一個字符串。如何在字符最後發生時拆分字符串,以便結果集包含兩個值?

所以輸入'/some/string/foo/bar/13'將成爲['/some/string/foo/bar', 13]

我知道我可以使用preg_split("/\//", $input);,但這種分裂成大小爲6的陣列中的所有字符串。然而

$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像這樣各部分匹配嗎?正如當我嘗試應用這些preg_match模式時,我得到一個大小爲2的數組,但只有匹配的值,而不是兩者。

回答

1

使用積極的向前看。

preg_split('~/(?=[^/]*$)~', $input); 

負先行。

preg_split('~/(?!.*/)~', $input); 
0

作爲一種補充的答案Avi,如果你想匹配和捕捉(而不是分裂),你也可以使用這樣的正則表達式:

(.*/)(.*) 

Working demo

Php code

$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` 
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]; 
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)

相關問題