2010-04-12 5 views
0

Скажем, у меня естьЗаменить более чем 1 экземпляр с PHP

SOMETEXT-somemore - тест --- test2

, как я мог бы его заменить все instaces, где Есть более чем на 1 - и есть его заменить они только с 1, так что это будет выглядеть как этот

SOMETEXT-somemore-тест-test2

ответ

2

использовать регулярное выражение: s/-+/-/ + говорит «один или более из предыдущего символа».

0

для ($ I = 0; $ I < STRLEN ($ текста) - 1; $ я ++) { , если ($ текст [$ я] == $ текст [$ + 1]) { $ text = str_replace ($ i. $ i, $ i, $ text); }}

Нигде рядом столь же эффективным, как с помощью str_replace() сам по себе для каждого персонажа вы думаете, может быть повторен, но он будет работать ..

Если все, что вы хотите, чтобы заменить два тире с одним :

$text = str_replace("--", "-", $text); 
+0

Я не вижу, как для /, если цикл будет работать. насколько я вижу, он заменяет «55» на «5», если символы 4 и 5 являются «x». Вы хотите проверить, что $ text [$ i] == '-' также, и вам придется использовать substr_replace ($ text, '-', $ i, 2) вместо str_replace(). Regex, вероятно, путь. – MSpreij

+0

@MSpreij: Кажется, что Брендан пытался создать алгоритм для замены произвольных повторяющихся символов. @Brendan Long: попробуйте это вместо: preg_replace ('{(.) \ 1+} ',' $ 1 ', $ text); – webbiedave

+0

Да, когда я прочитал его, я подумал, что вопрос спрашивает, как заменить любые два повторяющихся символа: \ –

0

Используйте это:

echo preg_replace("/-+/","-","sometext-somemore--test---test2"); 
//prints sometext-somemore-test-test2 
1

Вы могли бы сделать это с помощью регулярного выражения и функции preg_replace:

$str = 'sometext-somemore--test---test2'; 
echo preg_replace('/-+/', '-', $str); 

даст вам:

sometext-somemore-test-test2 


Узор я здесь: -+

  • Соответствует -
  • один или более чем один раз: +
    • См Repetition в руководстве PCRE, об этом.

И не стесняйтесь читать PCRE Patterns раздел руководства, если вы заинтересованы регулярными выражениями ;-)

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