如果前面有特定子字符串,则按空格分割

问题描述 投票:0回答:3
$text = "This is /n my text /n wow";

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

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

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

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

php regex string split explode
3个回答
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)
)。


2
投票

您是否研究过使用

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 上的 CodeSpace 窗口中。

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

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


1
投票

如果只有一个可能的分隔符,那么您只需将其附加到

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

$matches = preg_match('/(,|;)/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
© www.soinside.com 2019 - 2024. All rights reserved.