如何使explode()包括爆炸字符

时间:2014-09-05 15:53:14

标签: php regex string explode

$text = "This is /n my text /n wow";

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

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

但我希望它留下字符串" / n"实际上,而不是切断它, 输出应如下所示:

  

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

您是否考虑过使用preg_split()功能。根据文件:

  

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

使用此功能,应用与空格后跟前面的/n字符串匹配的正向lookbehind。

$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 选项以查看输出。我为复制和粘贴演示示例道歉。我无法弄清楚如何像其他一些小提琴程序一样创建专用网址。