0

基本上,我有一个字符串,我需要搜索并删除其中的每个 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

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

4

2 回答 2

3

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

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

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

preg_replace("/\n+/", "\n", "foo\n\nbar\n\n\n\n\nblee\nnope");
于 2013-09-01T10:26:37.427 回答
1

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

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

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

于 2013-09-01T10:31:31.177 回答