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

san*_*eep 9 php string substring

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

cod*_*ict 13

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

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

行动准则

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

结果:

Array
(
    [0] => 12
    [1] => jan
)
Run Code Online (Sandbox Code Playgroud)

  • 如果有空格,使用空间本身作为分隔符使用爆炸会不会更容易? (3认同)
  • 此代码仅在数字为第一位时才有效。如果您将 $str 更改为 'jan12' 它将输出 [0] =&gt; 'jan12' (3认同)

Mik*_*e C 12

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

  • @alex,如果这是速度问题,我发布的内容在我的测试中更快(100000 次迭代)。我相信也比较清楚了。 (2认同)

Bre*_*zer 7

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

这可能会有更好的效果


ale*_*lex 5

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

var_dump($matches);

$day = $matches[1][0];
$month = $matches[2][0];
Run Code Online (Sandbox Code Playgroud)

当然,这只适用于你的字符串完全按照"abc123"描述的那样(没有附加空格或前缀的空格).

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

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

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

var_dump($numbers, $letters);
Run Code Online (Sandbox Code Playgroud)

看见!