如何删除字符串中的每一次出现?

时间:2013-09-01 10:24:54

标签: php string replace

基本上,我有一个字符串,我需要搜索并删除其中的每个SECOND事件。

这是我的字符串的样子($s):

question1,answer1,answer2,answer3,answer4

question2,answer1,answer2,answer3,answer4

question3,answer1,answer2,answer3,answer4

以下是我的代码目前的样子:

$toRemove = array("\n");
$finalString = str_replace($toRemove, "", $s);

如您所见,我s字符串中的每一行都包含两个\n。我想搜索我的字符串,只替换每个SECOND \n,以便我的字符串最终成为:

question1,answer1,answer2,answer3,answer4
question2,answer1,answer2,answer3,answer4
question3,answer1,answer2,answer3,answer4

这可能吗?如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:3)

在您的具体情况下,您可能只想用一个换行符替换两个换行符:

$string = str_replace("\n\n", "\n", $string);

更复杂的正则表达式解决方案可能会崩溃任意数量的并发换行符:

preg_replace("/\n+/", "\n", "foo\n\nbar\n\n\n\n\nblee\nnope");

答案 1 :(得分:1)

Adam的答案对于类似UNIX的系统是正确的,但在Windows中,您可以使用不同的行结尾。我的正则表达式有点生疏,但我认为这适用于UNIX和Windows。

$string = preg_replace('/[\n\r]{2}/', '\n', $string);替换确切的2行结尾

$string = preg_replace('/[\n\r]+/', '\n', $string);替换1个或多个行结尾