我试图从字符串中删除重复的管道符号,并在它们之间使用逗号。让我们说我收到了这个字符串:
$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替换它们?感谢。
答案 0 :(得分:4)
在我看来,这是一个非常简单的preg_replace
电话:
echo trim(preg_replace('/[ |]+/', ' | ', $mystring));
[ |]+
:基本上匹配单词之间的所有空格和管道字符,并用字符串"替换它们。 | " 。因为我们正在添加前导和尾随空格,所以我将结果传递给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
答案 3 :(得分:1)
你可以试试这个 -
$mystring = '| | Apple | Pear | | | Banana | | Cherry';
echo preg_replace("/[\| ]+/", " | ", $mystring);
<强>输出强>
| Apple | Pear | Banana | Cherry