【问题标题】:How can I explode a string by multiple delimiters and also keep the delimiters? [duplicate]如何通过多个分隔符分解字符串并保留分隔符?
【发布时间】:2015-08-18 12:03:45
【问题描述】:

我正在尝试使用多个分隔符 (↑↑ , ↑ , ↓↓ , ↓) 分解字符串。

例如我有这个输入字符串:

$string = "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)";

我想把它转换成这样的数组(预期输出):

Array
(
    [0] => (2.8 , 3.1) → (
    [1] => ↓↓
    [2] => 2.4 , 
    [3] => ↓
    [4] => 3.0)
)

我最好的尝试打印出这个(当前输出):

Array
(
    [0] => (2.8 , 3.1) → (
    [1] => ↓
    [2] => ↓2.4 , 
    [3] => ↓3.0)
)

这是我当前的代码:

<?php

    function multiexplode ($delimiters,$string) {
        return explode(
            $delimiters[0],
            strtr(
                $string,
                array_combine(
                    array_slice($delimiters,1),
                    array_fill(0,count($delimiters)-1,array_shift($delimiters))
                )
            )
        );
    }

    $delimiters = array('↑↑','↑','↓↓','↓');
    $test = array('2up↑↑','1up↑','2down↓↓','1down↓');
    $newDel = array('2up','1up','2down','1down');
    $array = array();

    $strings = array(
        "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)",
        "(2.7 , 2.6) → (↑2.8 , ↑↑3.0)",
        "(2.0 , 3.4) → (↑↑2.8 , ↓↓2.3)"
    );

    foreach($strings as $string){
        foreach($test as $key => $reps){
            $string = str_replace(              
                $delimiters[$key],
                $reps,
                $string
            );
        }
        //echo $string;
        $array[] = array_values(array_filter(multiexplode($newDel,$string)));
    }

?>

我正在以这种格式构建它,因为我将循环这些值并在 powerpoint 中打印这些值,并且那些分隔符(箭头)具有不同的颜色

【问题讨论】:

    标签: php regex string explode preg-split


    【解决方案1】:

    这应该适合你:

    只需使用preg_split() 并设置标志以保留分隔符。例如

    <?php
    
        $string = "(2.8 , 3.1) → (↓↓2.4 , ↓3.0)";
        $arr =  preg_split("/(↑↑|↑|↓↓|↓)/", $string, -1, PREG_SPLIT_DELIM_CAPTURE);
        print_r($arr);
    
    ?>
    

    输出:

    Array
    (
        [0] => (2.8 , 3.1) → (
        [1] => ↓↓
        [2] => 2.4 , 
        [3] => ↓
        [4] => 3.0)
    )
    

    【讨论】:

    • deym。不知道它可能只是一个 3 行代码。谢谢
    • 任何没有 preg 的解决方案?如果可能,我总是尽量不使用它们。
    • @Soaku 不是。 explode() 不会保留分隔符,所以你需要preg_split()。而且我不明白你为什么要避免它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多