PHP - 删除重复的管道符号

PHP - remove duplicate pipe symbols

我正在尝试从字符串中删除重复的竖线符号,它们之间有逗号。假设我得到了这个字符串:

$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?谢谢。

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

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

查看演示 here

您需要添加一个空白字符:

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

代码:

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

输出:

| Apple | Pear | Banana | Cherry

Demo

在我看来这很简单 preg_replace 调用:

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

demo

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

你可以试试这个 -

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

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

输出

| Apple | Pear | Banana | Cherry

Demo