Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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_Arrays_Regex_String - Fatal编程技术网

以下字符串的PHP正则表达式

以下字符串的PHP正则表达式,php,arrays,regex,string,Php,Arrays,Regex,String,我有这根绳子 130003勒布特罗很酷609664大转子2 460936比比95 410635 MrRadical38 206311拉邦特577767 The Banzaikid 569248 marco 355894装甲车(U J 630259 SNEG323569014美洲驼501235 plummer 305212 lonefish 294268龙血399281 Stelomat 619909 McPred 22733故事管理员634691 Max 504980 MrFrench 2488

我有这根绳子

130003勒布特罗很酷609664大转子2 460936比比95 410635 MrRadical38 206311拉邦特577767 The Banzaikid 569248 marco 355894装甲车(U J 630259 SNEG323569014美洲驼501235 plummer 305212 lonefish 294268龙血399281 Stelomat 619909 McPred 22733故事管理员634691 Max 504980 MrFrench 24885 Darkshadow2013 647361 Cain
我想能够解析数字后面跟字母,如下所示:

130003 lebtro很酷
609664转子2
460936 BI95
410635 MrRadical38
206311拉邦特



647361该隐
我是否需要在PHP中使用正则表达式,或者有其他方法吗?

使用preg\u split:

$result = preg_split('~\s*\b(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);
或更防水:

$result = preg_split('~(?:\s|\A)\s*(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);
或者一个为什么不选择的模式:

$result = preg_split('~(?:\s+|\A\s*)(*SKIP)(?=[0-9])~', $str, -1, PREG_SPLIT_NO_EMPTY);
没有正则表达式:

$elts = explode(' ', $str);

$result = array();
$tmp = '';

foreach ($elts as $elt) {
    if (ctype_digit($elt)) {
        if ($tmp) $result[] = $tmp;
        $tmp = $elt;
    } else
        $tmp .= ' ' . $elt;
}
$result[] = $tmp;

下面是一个正则表达式解决方案:

\b(\d+)\s+(.+?(?=\s+\d|$))

您可以将其与
preg\u match\u all
一起使用。每个匹配项将包含第一组中的数字和第二组中的值

像这样的东西应该可以完成这项工作:

preg_match_all('#\b(\d+)\s+(.+?(?=\s+\d|$))#', $input, $matches, PREG_SET_ORDER);

// $matches[0][1] == "130003"
// $matches[0][2] == "lebtro is cool"
// $matches[1][1] == "609664"
// $matches[2][2] == "trochanter2"
使用此解决方案,任何以空格分隔的数字都被视为条目开始。如果所有数字都是6位数字,则将
\d+
替换为
\d{6}
(或
\d{6,}
至少替换6位数字)