【问题标题】:How to make explode() include the exploded character如何让explode() 包含爆炸后的字符
【发布时间】:2024-05-19 02:30:02
【问题描述】:
$text = "This is /n my text /n wow";

$quotes = explode('/n',$text);

这会将字符串拆分为“This is”“My text”“wow”

但我希望它保留字符串“/n”,而不是切断它, 输出应如下所示:

“这是/n”“我的文字/n”“哇”

【问题讨论】:

标签: php regex string explode


【解决方案1】:

将您的字符串分解为一个数组,然后将分隔符附加到结果数组的每个元素上。

$sep    = "/n";
$text   = "This is /n my text /n wow";
$quotes = explode($sep,$text);
$quotes = array_map(function($val) use ($sep) {
     return $val . $sep;
}, $quotes);
$last_key = count($quotes)-1;
$quotes[$last_key] = rtrim($quotes[$last_key], $sep);

(可能还需要trim($val))。

【讨论】:

  • 我怀疑他想把它添加到最后一项。
【解决方案2】:

如果您只有一个可能的分隔符,那么您可以简单地将其附加到explode 返回的标记上。但是,如果您要问这个问题,例如因为您有多个可能的分隔符并且需要知道哪一个分隔了两个标记,所以 preg_split 可能适合您。例如。对于分隔符','';'

$matches = preg_match('/(,|;)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

【讨论】:

    【解决方案3】:

    您是否考虑过使用preg_split() 函数。根据文档:

    preg_split — 用正则表达式分割字符串

    使用这个函数,应用一个正向的lookbehind,匹配空格后跟一个前面的/n字符串。

    $quotes= preg_split("/(?<=\/n) /", $text);
    

    您可以通过在上述语句之后执行print_r($quotes); 来测试这是不是所需的功能。 print_r 函数的输出类似于以下内容:

    Array ( [0] => This is /n [1] => my text /n [2] => wow )
    

    您可能需要在值上使用 trim() 以清除前导和尾随空格,但总体而言,它似乎可以满足您的要求。


    演示:

    如果您想测试此功能,请尝试复制以下代码块并将其粘贴到 http://phpfiddle.org 上的 CodeSpace 窗口中。

    <?php
    $text = "This is /n my text /n wow";
    $values = preg_split("/(?<=\/n) /", $text);
    print_r($values);
    ?>
    

    选择 Run - F9 选项以查看输出。对于复制和粘贴演示示例,我深表歉意。我不知道如何像其他一些小提琴程序一样创建专用 URL。

    【讨论】:

    • @l'L'l 你确定吗?在 OP 的代码中,他/她在字符串中有他们想要的 /n 字符,而不是换行符 \n 字符。我将 phpfiddle 更改为使用 \n 并返回未更改的字符串。不过我可能会离开。我不太擅长正则表达式。
    最近更新 更多