Не настраивается "жадность"

Тема в разделе "Регулярные выражения", создана пользователем dump1111, 17 сен 2010.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Вот код:

    Код:
    <?php
    $content = 'ML не привязан к какой-либо конкретной методологии или жизнен- 
    ному ци';
    echo preg_replace("#[-].*?\r\n#si",'-',$content);
    ?>
    
    выводит - ML не привязан к какой-ному ци
    т.е. preg_replace вырезает "-либо конкретной методологии или жизнен- ", хотя должно вырезать "- ".
    Но почему так? Ведь я же поставил .+? т.е. должно искаться наименьшее соответствие...
     
  2. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    потому что эта регулярка так и должна работать. если хочешь вырезать конкретно минус, надо остальное после него убрать:

    PHP:
    <?php
    $content 
    'ML не привязан к какой-либо конкретной методологии или жизнен- 
    ному ци'
    ;
    echo 
    preg_replace("#[-]#si",'-',$content);
    ?>
    и на будущее - str_replace
     
  3. dump1111

    dump1111

    Регистр.:
    7 июл 2009
    Сообщения:
    266
    Симпатии:
    8
    Так ведь я хочу вырезать только те тире, что поставлены для переноса.
     
  4. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    Тогда так вырезай

    PHP:
    echo preg_replace("#[-]\r\n#si",' ',$content);
    Да и на самом деле, чем str_replace не подходит?
     
  5. oleg3d

    oleg3d Создатель

    Регистр.:
    11 дек 2009
    Сообщения:
    34
    Симпатии:
    2
    U - жадность модификатор
     
Статус темы:
Закрыта.