Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中字符串字符之间的筛选_Php_String_Split - Fatal编程技术网

PHP中字符串字符之间的筛选

PHP中字符串字符之间的筛选,php,string,split,Php,String,Split,我有一根这样的绳子:12PUM4 开始时有两到三个数,中间有三个字符,最后有一到两个数。 我想把它分成三部分: 数字直到字符 中间的人物 其余的在角色后面 有人能帮忙吗?你可以用 输出 Array ( [0] => 12PUM4 [1] => 12 [2] => PUM [3] => 4 ) Array ( [0] => 12 [1] => PUM [2] => 4 ) 使用此函数时,它将拆分文本并将匹配项放入$matches数组中 [0-9]+-

我有一根这样的绳子:12PUM4

开始时有两到三个数,中间有三个字符,最后有一到两个数。 我想把它分成三部分:

  • 数字直到字符
  • 中间的人物
  • 其余的在角色后面
  • 有人能帮忙吗?

    你可以用

    输出

    Array ( [0] => 12PUM4 [1] => 12 [2] => PUM [3] => 4 )
    
    Array ( [0] => 12 [1] => PUM [2] => 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] => 12PUM4 [1] => 12 [2] => PUM [3] => 4 )
    
    Array ( [0] => 12 [1] => PUM [2] => 4 )
    

    使用正则表达式

    $string = '12PUM4';
    $array = preg_split('#(?<=\D)(?=\d)|(?<=\d)(?=\D)#i', $string);
    
    $string='12PUM4';
    $array=preg_split('#)(?试试这个

    $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
    
    这也是一种选择:

    $input = '12PUM4'; 
    $splitValues = sscanf('%d%[A-Z]%d', $input); 
    var_dump($splitValues);
    
    $string='12PUM4';
    $strCnt=strlen($string);
    $tmpStr='';
    $conArr=array();
    
    对于($i=0;$i您需要将
    explode
    与一些
    regex
    一起使用,问题是我以前没有使用过regex,所以我认为有些可以帮助进行更深入的研究。链接,不需要使用explode。您不能在没有分隔符的情况下使用explode。也不需要使用regex,因为它们很复杂:P.看看我的答案,这是一种简单的方法;)它将显示2,3个数字、3个字符以及结尾处的1或2个数字。阅读问题,因为他问了例如“字符之前的数字”<代码>一开始有两到三个数字,中间有三个字符,在结尾有一到两个数字。< /代码>你读了那个问题吗?BTW THX为你的代码>不有用< /代码>投票:好的,你是对的,但他也写了。“直到字符的数字是中间的字符,其余的在字符后面。”无论如何,我会取消下一票。这没问题,我的解决方案是正确的,它的输出:
    Array([0]=>12PUM4[1]=>12[2]=>PUM[3]=>4)
    ,有什么问题吗?小字符是问题的简单部分,只需在模式末尾添加
    i
    :)