我有一个字符串说: Order_num = "0982asdlkj"
我如何将它分成2个变量,使用数字元素,然后将另一个变量与php中的字母元素分开?
数字元素可以是1到4之间的任何长度,并且字母元素填充其余部分以使每个order_num总共10个字符.
我已经找到了php explode
函数...但是不知道如何在我的情况下制作它,因为数字的数量介于1和4之间,并且字母在此之后是随机的,因此无法在特定字母处分割.请尽可能具体帮助!
Fel*_*ing 32
您可以使用preg_split
使用前瞻和回顾后:
print_r(preg_split('#(?<=\d)(?=[a-z])#i', "0982asdlkj"));
Run Code Online (Sandbox Code Playgroud)
版画
Array
(
[0] => 0982
[1] => asdlkj
)
Run Code Online (Sandbox Code Playgroud)
这仅适用于字母部分实际上只包含字母而不包含数字的情况.
更新:
只是为了澄清这里发生了什么:
正则表达式查看每个位置,如果一个数字在该位置((?<=\d)
)之前,并且在它之后是一个字母((?=[a-z])
),那么它匹配并且该字符串在该位置被分割.整个事情是不区分大小写的(i
).
将preg_match()与正则表达式一起使用(\d+)([a-zA-Z]+)
.如果要将位数限制为1-4,将字母数限制为6-9,请将其更改为(\d+{1,4})([a-zA-Z]{6,9})
.
preg_match("/(\\d+)([a-zA-Z]+)/", "0982asdlkj", $matches);
print("Integer component: " . $matches[1] . "\n");
print("Letter component: " . $matches[2] . "\n");
Run Code Online (Sandbox Code Playgroud)
输出:
Integer component: 0982
Letter component: asdlkj
Run Code Online (Sandbox Code Playgroud)
你也可以preg_split
通过在数字和字母之间的点分割你的输入来做到这一点:
list($num,$alpha) = preg_split('/(?<=\d)(?=[a-z]+)/i',$Order_num);
Run Code Online (Sandbox Code Playgroud)