【问题标题】:PHP: Using preg_split to separate letters and numbersPHP:使用 preg_split 分隔字母和数字
【发布时间】:2018-09-04 09:02:53
【问题描述】:

PHP 上使用 preg_split,我想分隔字母和数字,而忽略其他(符号、制表符、空格等)。 例如:

"A/BC 1"     => array("A","BC","1")
"A1-BCD/2"   => array("A","1","BCD","2")
"A1BC23-45"  => array("A","1","BC","23","45"), not array("A1BC23","45")
"ABC###123"  => array("ABC","123")
"AB+C^12/34" => array("AB","C","12","34")

必须写什么模式?

【问题讨论】:

标签: php regex


【解决方案1】:
$arr = [
"A/BC 1",
"A1-BCD/2",
"A1BC23-45",
"ABC***123",
"AB+C^12/34",
];
foreach ($arr as $ele) {
    preg_match_all('/[A-Z]+|\d+/', $ele, $m);
    print_r($m[0]);
}

输出:

Array
(
    [0] => A
    [1] => BC
    [2] => 1
)
Array
(
    [0] => A
    [1] => 1
    [2] => BCD
    [3] => 2
)
Array
(
    [0] => A
    [1] => 1
    [2] => BC
    [3] => 23
    [4] => 45
)
Array
(
    [0] => ABC
    [1] => 123
)
Array
(
    [0] => AB
    [1] => C
    [2] => 12
    [3] => 34
)

【讨论】:

  • 所以,我必须使用 preg_match_all,而不是 preg_split?谢谢你。不好意思,我对PHP函数的了解不是很好。
  • @Mawan:用 preg_split 做同样的想法会复杂得多。
【解决方案2】:
    $str = "A/BC 1, A1-BCD/2, A1BC23-45, ABC***123, AB+C^12/34";
    $e = explode(',', $str);
    $arr = [];
    foreach ($e as $value){
        preg_match_all('/\w+/', $value, $matches);
        $s = '';
        foreach ($matches as $match){
            foreach ($match as $m){
                $s .= $m . " ";
            }
            $arr[] = $s;
        }

    }

    echo '<pre>';
    print_r($arr);

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多