我有一个这样的字符串:12PUM4
它的开头有两到三个数字,中间有三个字符,最后有一到两个数字。
我想以某种方式将它分成三个部分:
- 数字直到字符
- 中间的字符
- 其余的都在人物后面。
有人可以帮忙吗?
您可以使用preg_match();
$str = '12PUM4';
$matches = array();
preg_match('/([0-9]+)([a-zA-z]+)(.*)/', $str, $matches);
print_r($matches);
输出
Array ( [0] => 12PUM4 [1] => 12 [2] => PUM [3] => 4 )
当您使用此功能时,它将拆分文本并将匹配项放入$matches
数组中
[0-9]+
- 匹配至少一个或多个数字[a-zA-Z]+
是至少一个或多个字符.*
是什么(几乎)()
- 用作放入$matches
数组的子模式更多关于如何使用 preg_match 的信息可以在这里找到
在你写的条件下使用substr()的解决方案最后有 12 位数字、3 个字符和 1 或 2 位数字。
$str = '12PUM4';
$matches = array( 0 => substr($str,0, 2), 1 => substr($str, 2, 3) , 2 => substr($str, 5, strlen($str)>6 ? 2 : 1));
print_r($matches);
输出
Array ( [0] => 12 [1] => PUM [2] => 4 )
sscanf()在这里也是一个选项:
$input = '12PUM4';
$splitValues = sscanf('%d%[A-Z]%d', $input);
var_dump($splitValues);
使用正则表达式
$string = '12PUM4';
$array = preg_split('#(?<=\D)(?=\d)|(?<=\d)(?=\D)#i', $string);
$string = '12PUM4';
$strCnt = strlen($string);
$tmpStr = '';
$conArr = array();
for($i=0;$i<$strCnt;$i++){
if(is_numeric($string[$i])){
if($tmpStr != '' && !is_numeric($tmpStr)){
$conArr[] = $tmpStr;
$tmpStr = '';
}
$tmpStr .= $string[$i];
}else{
if(is_numeric($tmpStr)){
$conArr[] = $tmpStr;
$tmpStr = '';
}
$tmpStr .= $string[$i];
}
}
$conArr[] = $tmpStr;
print_r($conArr);
尝试这个
$name = "12PUM4"
$pattern = "/^([0-9]{2,3})([A-Z]{3})([0-9]{1,2})$/";
preg_match($pattern, $name , $matches);
echo $matches[1]; // first numbers
echo $matches[2]; // middle chars
echo $matches[3]; // last numbers