如何删除字符串中每隔一秒出现的内容


How to remove every second occurrence within a string?

基本上,我有一个字符串,我需要搜索并删除其中的每一个第二次出现。

以下是我的字符串($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。我想搜索我的字符串,只替换每一个第二个'n,这样我的字符串就会变成:

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

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

在您的特定情况下,您可能只想用一条换行符替换两条换行符:

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

更复杂的正则表达式解决方案可以折叠任意数量的并发换行符:

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

Adam的答案对于类UNIX系统是正确的,但在Windows中可以有不同的行尾。我的Regex有点生疏,但我认为这应该适用于UNIX和Windows。

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

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