正则表达式:在数字/字符串上拆分字符串?

qwe*_*rty 5 php regex string split numbers

考虑以下:

700italic
regular
300bold
300bold900
Run Code Online (Sandbox Code Playgroud)

所有这些都是不同的示例,每次只执行一行.

预期结果:

// 700italic
array(
    0 => 700
    1 => itailc
)

// regular
array(
    0 => regular
)

// 300bold
array(
    0 => 300
    1 => bold
)

// 300bold900
array(
    0 => 300
    1 => bold
    2 => 900
)
Run Code Online (Sandbox Code Playgroud)

我做了以下:

(\d*)(\w*)
Run Code Online (Sandbox Code Playgroud)

但这还不够.它有点工作,当我只有两个"部分"(数字|字符串或字符串|数字),但如果我添加第三个"段",我不会工作.

有什么建议?

Mar*_*der 5

你可以preg_split改用.然后,您可以使用与单词和字母之间的位置匹配的外观:

$result = preg_split('/(?<=\d)(?=[a-z])|(?<=[a-z])(?=\d)/i', $input);
Run Code Online (Sandbox Code Playgroud)

请注意,\w除了字母之外,还匹配数字(和下划线).

替代方法(使用匹配函数)是每次匹配preg_match_all仅使用和匹配数字字母:

preg_match_all('/\d+|[a-z]+/i', $input, $result);
Run Code Online (Sandbox Code Playgroud)

现在,您将获得生成数组中每个所需元素的单个匹配,而不是捕获.但是你最后只想要阵列,所以你并不关心它们的来源.