基本上,我有一个字符串,我需要搜索并删除其中的每个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
这可能吗?如果是这样,我该怎么做?
答案 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个或多个行结尾