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

PHP将字符串拆分为整数元素和字符串,php,regex,split,Php,Regex,Split,我有一个字符串说:Order\u num=“0982asdlkj” 在php中,如何将其拆分为两个变量,一个是number元素,另一个是letter元素 number元素可以是1到4之间的任意长度,比如说,letter元素填充其余部分,使每个order_num总共有10个字符 我已经找到了phpexplode函数……但是我不知道如何在我的例子中使用它,因为数字的数量在1到4之间,之后的字母是随机的,所以无法在特定的字母处拆分。请尽可能具体地提供帮助 与正则表达式(\d+)([a-zA-Z]+)一

我有一个字符串说:
Order\u num=“0982asdlkj”

在php中,如何将其拆分为两个变量,一个是number元素,另一个是letter元素

number元素可以是1到4之间的任意长度,比如说,letter元素填充其余部分,使每个order_num总共有10个字符

我已经找到了php
explode
函数……但是我不知道如何在我的例子中使用它,因为数字的数量在1到4之间,之后的字母是随机的,所以无法在特定的字母处拆分。请尽可能具体地提供帮助

与正则表达式
(\d+)([a-zA-Z]+)
一起使用。如果要将数字数限制为1-4,字母数限制为6-9,请将其更改为
(\d+{1,4})([a-zA-Z]{6,9})

产出:

Integer component: 0982
Letter component: asdlkj

您可以使用:

只有当字母部分真正只包含字母而不包含数字时,这才有效

更新:

只是想澄清一下这里发生了什么:


正则表达式查看每个位置,如果该位置前面有一个数字(
(?),则可以使用正则表达式

preg_match('/(\d{1,4})([a-z]+)/i', $str, $matches);
array_shift($matches);
list($num, $alpha) = $matches;

您也可以使用
preg_split
在数字和字母之间的点拆分输入:

list($num,$alpha) = preg_split('/(?<=\d)(?=[a-z]+)/i',$Order_num);
list($num,$alpha)=preg_split('/(?检查此项

<?php
$Order_num = "0982asdlkj";
$split=split("[0-9]",$Order_num);
$alpha=$split[(sizeof($split))-1];
$number=explode($alpha, $Order_num);
echo "Alpha -".$alpha."<br>";
echo "Number-".$number[0];
?>

关于


wazzy

这就是在
preg_split()中使用lookaround断言的方法
!+1使用“拆分”而非“匹配”有什么好处?你需要避开“in\d”。@Col.Shrapnel:问题的答案并不总是唯一的。人们以不同的方式思考。知道解决问题的不同方式更好!反正讨论已经结束了。我只想展示一种解决方法。这不是我的错OP接受了这个答案。如果你们中的一些人想得到唯一的、真正的解决方案,那就去生活在一个勇敢的新世界里。不要忘记,答案不仅是给提出要求的人的,也是给后面的人的……我不会严格限制人数,除此之外,这是最明智的答案。
$matches=array()
并不是真正需要的。
preg\u match
将确保数组始终存在,即使没有匹配。而且您不需要在\\d+中转义。\d+就足够了。@codaddict:但对于不太熟练的PHP程序员来说,它是一种很好的编码风格,更容易理解。@codaddict不知道
数组()
,但我不喜欢不转义。或者使用更简单的表达式:/(\d+)(*)/将您的PHP从古代版本升级到现代版本并运行它again@Wazzy:因为人们很疯狂,他们不喜欢投反对票的答案。公平地说,你的解决方案不是很优雅,但它给出了正确的解决方案。我不会投反对票,但我也不会投反对票。@Col.Shrapnel:可以与PHP 5配合使用。3.3@Col.弹片:所以
split
在PHP5.3中被弃用,可以被
preg_split
取代……它仍然使用
split
preg_split
工作。我反对不加解释地进行下一步投票,将PHP从古代版本升级到现代版本,并再次运行它不是一种解释。
preg_match('/(\d{1,4})([a-z]+)/i', $str, $matches);
array_shift($matches);
list($num, $alpha) = $matches;
list($num,$alpha) = preg_split('/(?<=\d)(?=[a-z]+)/i',$Order_num);
<?php
$Order_num = "0982asdlkj";
$split=split("[0-9]",$Order_num);
$alpha=$split[(sizeof($split))-1];
$number=explode($alpha, $Order_num);
echo "Alpha -".$alpha."<br>";
echo "Number-".$number[0];
?>