我想分割一个这样的字符串:
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
答案 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
)