2014-09-10 4 views
0

Я хотел бы разделить строку, как это:Разделить строку под первым номером в PHP

Mystreetway 123, 1.th 

Так что я могу иметь следующий выходной массив:

0 => Mystreetway 
1 => 123, 1.th 

= Так что разбивает строку на первое найденное целое число, и это и все после попадания во второй сплит.

Я попробовал следующее найденное решение:

$key= "Mystreetway 123, 1.th"; 
$pattern = "/(\d+)/"; 

$array = preg_split($pattern, $key, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
print_r($array); 

Но она возвращает следующее:

[0] => Mystreetway [1] => 123 [2] => , [3] => 1 [4] => .th 

ответ

5

Разделить с рисунком опережения вместо (так что вы не должны жонглировать захваченные разделители) , затем ограничьте количество групп только двумя (с третьим параметром preg_split:

$key= "Mystreetway 123, 1.th"; 
$pattern = '/(?=\d)/'; 

$array = preg_split($pattern, $key, 2); 
print_r($array); 
2

Используйте опережение утверждения в соответствии с (пусто) выражением нулевой ширины перед цифрой:

/(?=\d)/ 
2

Параметр, который вы ищете, limit. Измените свой третий параметр с -1 (это означает, что нужно разделить столько раз, сколько необходимо) до 1 (это означает, что разделить только один раз), и строка будет разделена на первое целое число.

$key= "Mystreetway 123, 1.th"; 
$pattern = "/(\d+)/"; 

$array = preg_split($pattern, $key, 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
print_r($array); 

Edit: В вашем случае, это не на самом деле работает, но если мы изменим регулярное выражение немного работает по желанию;

$key= "Mystreetway 123, 1.th"; 
$pattern = "/(\d.*)/"; // Note we're now looking for a digit followed by anything 

$array = preg_split($pattern, $key, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
print_r($array); 

Выход:

Array 
(
    [0] => Mystreetway 
    [1] => 123, 1.th 
) 
Смежные вопросы