根据字母表后跟数字拆分字符串

时间:2016-04-18 07:04:44

标签: php regex preg-split

我尝试拆分字符串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] => )

3 个答案:

答案 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