用PHP中的第一个数字拆分一个字符串

时间:2014-09-10 11:10:44

标签: php preg-match

我想分割一个这样的字符串:

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

4 个答案:

答案 0 :(得分:5)

使用超前模式进行拆分(因此您不必为处理的分隔符加权),然后将组数限制为仅两个(使用preg_split的第三个参数:

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

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

答案 1 :(得分:2)

使用超前断言来匹配数字前的零宽度(空)表达式:

/(?=\d)/

答案 2 :(得分: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);

编辑:对于您的情况,这实际上不起作用,但如果我们稍微更改您的正则表达式,它会按预期工作;

$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
)

答案 3 :(得分:0)

使用preg_match

preg_match('/(\D*)(\d*.*)/', $input_line, $output_array);

输出

array(3
0   =>  Mystreetway 123, 1.th
1   =>  Mystreetway 
2   =>  123, 1.th
)
相关问题