保留多字符分隔符


Keep multi-character delimiter

我有一个字符串

$string = "hi!n!my!n!name!n!is!n!bob";

我想按"!n!'我试过这样的东西:

$splitstring = preg_split("!n!", $string,-1, PREG_SPLIT_DELIM_CAPTURE);

但它删除了'n'的所有实例,而不是!n因此,如果我print_r数组,它看起来像:

Array(
[0]=>hi!
[1]=>!my!
[2]=>!
[3]=>!ame!
[4]=>!is!
[5]=>!bob
)

它会拆分每一个出现的"n"。不n(3个字符的分隔符)。

有人知道怎么解决这个问题吗?提前感谢

在正则表达式中需要分隔符(例如/

$splitstring = preg_split("/!n!/", $string,-1, PREG_SPLIT_DELIM_CAPTURE);

您可以使用爆炸:http://php.net/explode

$parts = explode('!n!', $string);

要复制您开始使用的字符串,可以执行以下操作:

$string = implode('!n!', $parts);

最后,如果你想保留delimeter,你可以随时将它们重新添加进来。目前还不清楚你是希望它们位于每个实体的开头还是结尾(因为你的起始字符串纯粹将它们用作分隔符)。你可以这样做:

foreach ($parts as &$part)
{
    $part = '!n!'.$part.'!n!';
}

好的,首先感谢您的回复。使用/有效,但它删除了所有分隔符(!n!)。我怀疑PREG_SPLIT_DELIM_CAPTURE不起作用。所以,我发现了这个。修复方法类似于:

$splitstring=preg_split("/(!n!)/",$string,-1,preg_split_DELIM_CAPTURE);

将括号放在输出的分隔符周围:

[0]hi
[1]!n!
[2]my
[3]!n!
[4]name
[5]!n!
[6]is
[7]!n!
[8]bob

希望这能帮助