PHP - 删除重复的管道符号

时间:2015-12-07 12:14:45

标签: php preg-replace

我试图从字符串中删除重复的管道符号,并在它们之间使用逗号。让我们说我收到了这个字符串:

$mystring = '| | Apple | Pear | | | Banana | | Cherry';

然后所需的输出应为:

| Apple | Pear | Banana | Cherry';

这里也会提出类似的问题:

removing duplicate characters next to each other

但是,当我将建议的preg_replace函数(如该主题中最受欢迎的答案中所述)应用于我的字符串时,我收到了一个PHP错误:编译失败:在偏移量2处没有重复。

这就是我的尝试:

$mystring = preg_replace('/ |+/', ' |', $mystring);

有没有人知道如何删除双管符号并在单词之间用1替换它们?感谢。

4 个答案:

答案 0 :(得分:4)

在我看来,这是一个非常简单的preg_replace电话:

echo trim(preg_replace('/[ |]+/', ' | ', $mystring));

demo

[ |]+:基本上匹配单词之间的所有空格和管道字符,并用字符串"替换它们。 | " 。因为我们正在添加前导和尾随空格,所以我将结果传递给trim以从输出的开头(和结束)中删除这些空格。

答案 1 :(得分:1)

我不确定这是否是更好的解决方案,但这肯定会对您有所帮助,

$mystring = '| | Apple | Pear | | | Banana | | Cherry';
echo implode(" | ",array_values(array_filter(array_map('trim', explode("|",$mystring)))));//echoes Apple | Pear | Banana | Cherry

请参阅演示here

答案 2 :(得分:1)

您需要添加空格字符:

/[|\s*]+/ - matches |  | or | |
/[|\ ]+/  - matches  | |

代码:

<?php
$mystring = '| | Apple | Pear | | | Banana | | Cherry';
$mystring = preg_replace('/[|\s*]+/', ' | ', $mystring);
echo $mystring;

输出:

| Apple | Pear | Banana | Cherry

Demo

答案 3 :(得分:1)

你可以试试这个 -

$mystring = '| | Apple | Pear | | | Banana | | Cherry';

echo preg_replace("/[\| ]+/", " | ", $mystring);

<强>输出

| Apple | Pear | Banana | Cherry

Demo