如何在php中从字符串中分隔字母和数字

时间:2010-11-30 06:35:54

标签: php string substring

我有一个字母组合字母和数字。对于我的应用程序,我必须用字母和数字分隔一个字符串:例如:如果我的字符串是“12jan”,我将分别得到“12”“jan”..

9 个答案:

答案 0 :(得分:13)

您可以使用preg_split将字符串拆分为以数字开头的点,后跟字母:

$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);

Code in Action

<?php
$str = '12jan';
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);                                                               
print_r($arr);

结果:

Array
(
    [0] => 12
    [1] => jan
)

答案 1 :(得分:10)

$numbers = preg_replace('/[^0-9]/', '', $str);
$letters = preg_replace('/[^a-zA-Z]/', '', $str);

答案 2 :(得分:7)

$string = "12312313sdfsdf24234";
preg_match_all('/([0-9]+|[a-zA-Z]+)/',$string,$matches);
print_r($matches);

这可能会有更好的效果

答案 3 :(得分:5)

preg_match_all('/^(\d+)(\w+)$/', $str, $matches);

var_dump($matches);

$day = $matches[1][0];
$month = $matches[2][0];

当然,只有当您的字符串完全按照“abc123”所描述的那样(没有附加或添加空格)时,这才有效。

如果你想获得所有数字和字符,你可以使用一个正则表达式。

preg_match_all('/(\d)|(\w)/', $str, $matches);

$numbers = implode($matches[1]);
$letters = implode($matches[2]);

var_dump($numbers, $letters);

See it!

答案 4 :(得分:1)

根据我的要求,这适用于我,您可以根据自己的需要进行编辑

function stringSeperator($string,$type_return){

    $numbers =array();
    $alpha = array();
    $array = str_split($string);
    for($x = 0; $x< count($array); $x++){
        if(is_numeric($array[$x]))
            array_push($numbers,$array[$x]);
        else
            array_push($alpha,$array[$x]);
    }// end for         

    $alpha = implode($alpha);
    $numbers = implode($numbers);

    if($type_return == 'number')    
    return $numbers;
    elseif($type_return == 'alpha')
    return $alpha;

}// end function

答案 5 :(得分:0)

试试这个:

$string="12jan";
$chars = '';
$nums = '';
for ($index=0;$index<strlen($string);$index++) {
    if(isNumber($string[$index]))
        $nums .= $string[$index];
    else    
        $chars .= $string[$index];
}
echo "Chars: -$chars-<br>Nums: -$nums-";


function isNumber($c) {
    return preg_match('/[0-9]/', $c);
} 

答案 6 :(得分:0)

使用PHPExcel进行更多工作后,此类操作很常见。 #Tapase ,. 这是一个preg_split,可以让你想要的是字符串中的空格。

<?php
$str = "12 January";
$tempContents = preg_split("/[\s]+/", $str);
foreach($tempContents as $temp){
echo '<br/>'.$temp;
}
?>

您可以在 s 旁边添加逗号分隔逗号。 希望它可以帮助某人。安东K。

答案 7 :(得分:0)

<?php
$data = "#c1";
$fin =  ltrim($data,'#c');
echo $fin;
?>

答案 8 :(得分:0)

您可以通过匹配数字或非数字序列来拆分字符串,然后使用 \K“忘记”匹配的字符。

preg_split(
    '~(?:\d+|\D+)\K~',
    $string,
    null,
    PREG_SPLIT_NO_EMPTY
)

或者您可以使用匹配的数字作为分隔符并在输出中保留分隔符。

preg_split(
    '~(\d+)~',
    $string,
    null,
    PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE 
)

这两种技术的demonstration