在PHP中,我需要將字符串拆分爲不帶前導「*」的「:」字符。根據前導字符的存在拆分字符串
這是使用爆炸(什麼)呢:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
不過,我需要的輸出是:
output: array("1*:2", "3*:4")
我將如何達到預期的輸出?
在PHP中,我需要將字符串拆分爲不帶前導「*」的「:」字符。根據前導字符的存在拆分字符串
這是使用爆炸(什麼)呢:
$string = "1*:2:3*:4";
explode(":", $string);
output: array("1*", "2", "3*", "4")
不過,我需要的輸出是:
output: array("1*:2", "3*:4")
我將如何達到預期的輸出?
$str = '1*:2:3*:4';
$res = preg_split('~(?<!\*):~',$str);
print_r($res);
將輸出
Array
(
[0] => 1*:2
[1] => 3*:4
)
圖案基本上說:
分裂由
您可能正在尋找preg_match_all()
而不是explode()
,因爲您正在嘗試更復雜的拆分,而不是explode()
本身可以處理的。 preg_match_all()
將允許您收集匹配特定模式的字符串的所有部分,使用正則表達式表示。你正在尋找的模式是沿着線的東西:
任何東西,除了:其次是*:其次是什麼,但:
所以,試試這個來代替:
preg_match_all('/[^:]+\*:[^:]+/', $string, $matches);
print_r($matches);
它會輸出類似於:
Array
(
[0] => Array
(
[0] => 1*:2
[1] => 3*:4
)
)
你應該能夠使用我這與您使用explode()
的結果的方式大致相同,即使在數組中添加了維(它將匹配分成'組',並且所有結果都與整個表達式或第一個(第0)組匹配) 。
比我更優雅[冒號不是由星號引線]顯然我設法錯過'preg_split()'的存在:P – Maccath
@Maccath謝謝。我正在考慮使用['preg_match_all()'](http://php.net/manual/en/function.preg-match-all.php),但後來我記得有這個函數,我很少需要/使用:)乾杯。 – inhan