За последние 24 часа нас посетили 37945 программистов и 1810 роботов. Сейчас ищут 856 программистов ...

Помогите в синтаксисе preg_replace разобраться.. в тупике(

Тема в разделе "PHP для новичков", создана пользователем Enzo_brn, 14 фев 2011.

  1. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    Здравствуйте, задача такая:
    найти в строке $str все символы "*".

    сейчас:
    $str = "abcd*e fgh***h ijk*lm*o**p";

    нужно получить:
    $str = "abcd*e fgh*h ijk*lm*o*p"; //т.е. чтоб где их несколько, одна оставалась.

    пробовал решать так:
    $str = preg_replace("/\*{2,}/","",$str); //шаблон по идее должен значить "где встречается больше одной * подряд
    //то стираем"

    где же я накосячил..
     
  2. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    $str = preg_replace("/\*+/","",$str); //так работает но не оставляет ни одного.. как количество правильно задать от двух?
     
  3. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    так не пробовал
    Код (Text):
    1. $str = preg_replace("/\*+/","*",$str);
    ?
     
  4. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    попробовал, но похоже так функция меняет не "*+" на "*" а заменяет "*" на "*"

    делаю так:
    $str = preg_replace("/\*+/","",$str); //и тогда "*" не остается ни одной во всей строке.. а нужно менять любое
    //количество на одну "*"
     
  5. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Enzo_brn

    PHP:
    1. <?php
    2.  
    3.   $str = "abcd*e fgh***h ijk*lm*o**p";
    4.   $str = preg_replace('/\*+/', '*', $str);
    5.   echo $str;
    6.  
    7. ?>
    выводит abcd*e fgh*h ijk*lm*o*p.
    что ещё не так?
     
  6. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    Может функция у меня из-за цикла не работает..
    PHP:
    1.  
    2. $input = fopen('input.txt','a');
    3. $tmp = fopen("text.txt",r);
    4.  
    5. while (!feof($tmp)) {
    6. $str = fgetss($tmp,2);
    7. //..
    8. //тут еще много всего
    9. //..
    10.  
    11. $str = preg_replace('/\*+/', '*', $str);
    12. echo $str; //выводит текст но "*" там не поубавилось..
    13.  
    14. fwrite($input,$str);
    15. fclose($tmp);
    16. fclose($input);
    17.  
    18.  
    может стоит заново считать из файла без цикла и тогда заработает?
     
  7. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    а тот пример, что я дал, работает?
     
  8. Enzo_brn

    Enzo_brn Активный пользователь

    С нами с:
    21 янв 2011
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Барнаул
    Да, работает) Спасибо за советы и пример. Ошибку осознал(это из-за цикла) исправлюсь)))