【问题标题】:What is the best way to split letters and numbers?拆分字母和数字的最佳方法是什么?
【发布时间】:2014-02-09 11:11:37
【问题描述】:

我有这个变量:

$str = "w15";

将其分别拆分为w 和15 的最佳方法是什么? explode() 正在删除 1 个字母,而 str_split() 没有将字符串拆分为不相等字符串的选项。

【问题讨论】:

  • w15g12z 会给你什么?

标签: php arrays string function split


【解决方案1】:
$str = "w15xx837ee";

$letters = preg_replace('/\d/', '', $str);
$numbers = preg_replace('/[^\d]/', '', $str);

echo $letters; // outputs wxxee
echo $numbers; // outputs 15837

【讨论】:

  • 谢谢!这是完美的!
  • @OfirH:以后,请让您的问题尽可能清晰。 准确地陈述您的要求,您会得到更准确的答案。无论如何,我很高兴看到您的问题得到解决。祝你的项目好运,干杯!
【解决方案2】:

你可以这样做来分隔字符串和数字

<?php
$str = "w15";
$strarr=str_split($str);

foreach($strarr as $val)
{
    if(is_numeric($val))
    {
        $intarr[]=$val;
    }
    else
    {
        $stringarr[]=$val;
    }
}

print_r($intarr);
print_r($stringarr);

输出:

Array
(
    [0] => 1
    [1] => 5
)
Array
(
    [0] => w
)

如果你希望它是 15 ,你可以将 $intarr 内爆!

【讨论】:

  • 然后你implode($intarr, ''); implode($stringarr, '');
  • 快速简单的解决方案
  • @sergio,感谢您的支持,但似乎我达到了极限,我没有得到任何代表大声笑:)
  • @sergio:我不这么认为。它有多快,他使用str_split然后foreach循环,然后结果是array。在我看来这并不快。
  • @LionKing,他的意思不是 fast 你认为的 fast。他提到的fast是……我是第一个回答这个问题的人fast。
【解决方案3】:

使用preg_split() 来实现:

$arr = preg_split('~(?<=\d)(?=[a-zA-Z])|(?<=[a-zA-Z])(?=\d)~', $str);

输出:

Array
(
    [0] => w
    [1] => 15
)

例如,字符串w15g12z 将给出以下数组:

Array
(
    [0] => w
    [1] => 15
    [2] => g
    [3] => 12
    [4] => z
)

Demo

【讨论】:

    【解决方案4】:

    更干净:

    $result = preg_split("/(?<=\d)(?=\D)|(?<=\D)(?=\d)/",$str);
    

    本质上,这有点像使用自定义集手动实现\b(而不是\w)

    【讨论】:

    • 这不会给出预期的结果 - 这会将字符串拆分为 w1 和 5。但是 OP 想要 w 和 15。见this demo。
    • 呸,我的错。把我的大写字母弄混了 XD
    • 毕竟这不是what the OP wanted。 :P
    • 哦,ffs...我不知道为什么我有时会打扰XD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2020-07-11
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多