如何使 explode() 包含分解字符


How to make explode() include the exploded character

$text = "This is /n my text /n wow";
$quotes = explode('/n',$text);

这会将字符串拆分为"这是"我的文本"哇">

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

"这是/n" "我的文字/n" "哇">

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

$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)(。

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

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

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

preg_split — 通过正则表达式拆分字符串

使用此函数,应用与空格后跟前面的/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 上的"代码空间"窗口中。

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

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