-4

我有一个这样的字符串:12PUM4

它的开头有两到三个数字,中间有三个字符,最后有一到两个数字。

我想以某种方式将它分成三个部分:

  1. 数字直到字符
  2. 中间的字符
  3. 其余的都在人物后面。

有人可以帮忙吗?

4

5 回答 5

4

您可以使用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 )
于 2013-05-21T11:58:09.290 回答
1

sscanf()在这里也是一个选项:

$input = '12PUM4'; 
$splitValues = sscanf('%d%[A-Z]%d', $input); 
var_dump($splitValues);
于 2013-05-21T12:07:16.373 回答
0

使用正则表达式

$string = '12PUM4';
$array = preg_split('#(?<=\D)(?=\d)|(?<=\d)(?=\D)#i', $string);
于 2013-05-21T12:00:39.267 回答
0
$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);
于 2013-05-21T12:07:24.487 回答
0

尝试这个

$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
于 2013-05-21T12:00:48.990 回答