2015-12-07 5 views
1

Я пытаюсь удалить дубликаты символов из строки с запятой между ними. Скажем, я получил эту строку:PHP - удалить повторяющиеся символы трубы

$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

вы генерируя его от некоторых массив? –

+0

Нет. Я получаю строки из внешнего источника. – elton73

ответ

4

Он смотрит на меня как довольно простой preg_replace вызова:

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

demo

[ |]+: В основном соответствует все пробелы и трубные символы между слова здесь и заменяет их строкой "| . " Потому что мы добавим начальные и завершающие пространство, я передаю результат в trim, чтобы удалить эти пробелы с самого начала (и конца) выходного сигнала

+0

Спасибо, сэр, это прекрасно работает. Я забыл добавить скобки [], потому что они не использовались в другом вопросе.Может быть, потому, что там был только один символ (одна запятая). – elton73

1

Я не уверен, если это лучшее решение, но это, безусловно, поможет вам,

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

См демонстрационная here

1

Вам нужно добавить символ пробела:

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

Код:

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

Выход:

| Apple | Pear | Banana | Cherry 

Demo

1

Вы можете попробовать это -.

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

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

Выход

| Apple | Pear | Banana | Cherry 

Demo

Смежные вопросы