PHP将字符串拆分为整数元素和字符串

Dav*_*801 22 php regex split

我有一个字符串说: 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).

  • @col.弹片:问题并不总是*唯一真正的答案*.人们以不同的方式思考.了解解决问题的不同方法甚至更好! (3认同)
  • 无论如何,讨论结束了.我想要的只是展示*一种方式.OP接受了答案,这不是我的错.如果你们中的一些人想要*只有一个和真正的解决方案*然后去生活在一个*勇敢的新世界*.不要忘记,答案不仅适用于要求的人,也适用于那些追求的人...... (3认同)
  • 使用拆分匹配有什么好处? (2认同)

mar*_*cog 6

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)

http://ideone.com/SKtKs


cod*_*ict 5

你也可以preg_split通过在数字和字母之间的点分割你的输入来做到这一点:

list($num,$alpha) = preg_split('/(?<=\d)(?=[a-z]+)/i',$Order_num);
Run Code Online (Sandbox Code Playgroud)

看见