我尝试拆分字符串A1B22C333以获取数组[0] => A1
,[1] => B22
,[2] => C333
。这是我失败的尝试:
$mystring = "A1B22C333";
$pattern = "[\w\d+]";
$arr = preg_split("/".$pattern."/", $mystring);
print_r($arr);
但我明白了:
Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => [9] => )
答案 0 :(得分:3)
你可以使用像
这样的正则表达式(?<!^)(?=\D)
请参阅regex demo
(?<!^)(?=\D)
匹配的位置不在字符串的开头和非数字字符之前。
请参阅IDEONE demo:
$mystring = "A1B22C333";
$pattern = '~(?<!^)(?=\D)~';
$arr = preg_split($pattern, $mystring);
print_r($arr);
// => Array( [0] => A1 [1] => B22 [2] => C333 )
如果您使用'~(?=\D)~'
(demo),还可以将正则表达式简化为PREG_SPLIT_NO_EMPTY
(非数字前的位置):
$pattern = '~(?=\D)~';
$arr = preg_split($pattern, $mystring, -1, PREG_SPLIT_NO_EMPTY);
答案 1 :(得分:1)
而不是preg_split
使用preg_match_all
以及跟随正则表达式
([a-zA-Z]\d+)
所以你的代码看起来像
preg_match_all("/([a-zA-Z]\d+)/","A1B22C333",$m);
print_r($m[0]);
输出
Array
(
[0] => A1
[1] => B22
[2] => C333
)
答案 2 :(得分:1)
我认为你应该使用preg_match_all。
preg_match_all("/([A-Z]\d+)/", "A1B22C333", $output_array);
点击preg_match_all
http://www.phpliveregex.com/p/fnj