Регулярка со смешанным типом данных

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

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

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    Подскажите, пожалуйста, регулярное выражение, которое бы находило тексты след видов:
    11 слово-лала
    1-5 слово-ловолово
    слово-трюлюлю

    Думал
    PHP:
    preg_match ("|[0-9-] слово[а-я-]|is",$text);
    Но последний вариант данная регулярка не спарсивает.
    Как "объяснить" регулярке,что поиск цифр не обязателен?
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    * - квантификатор, означающий ноль или более вхождений
    \s - любой пробельный символ
    дальше думаю сам догадаешься
     
  3. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Ещё вопрос.
    Как в preg_replace ("|[0-9-] слово[а-я-]|is",'<b>'.Как здесь указать результат поиска регулярки?.'</b>',$text);
     
  4. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    preg_replace ("|([0-9-] слово[а-я-])|is",'<b>$1</b>',$text);

    а вообще, судя по задаче, как то так надо: preg_replace ("|(([\d- ]+)?слово[а-я-]+)|is", '<b>$1</b>', $text);
     
  5. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    319
    Симпатии:
    124
    Правильней вот так:
    Код:
    preg_replace ("|(([B][COLOR="Red"]?:[/COLOR][/B][\d- ]+)?слово[а-я-]+)|is", '<b>$1</b>', $text);
    Чтоб не запоминать этот паттерн...
     
  6. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    PHP:
    preg_replace ("|((?:[\d- ]+)?слово[а-я-]+)|is"'<b>$1</b>'$text);
    Он так только удаляет найденное слово.
     
  7. VandJ

    VandJ

    Регистр.:
    8 апр 2008
    Сообщения:
    319
    Симпатии:
    124
    Если версия PHP меньше 4.0.4, то так
    PHP:
    preg_replace ("|((?:[\d- ]+)?слово[а-я-]+)|is"'<b>\\1</b>'$text);
     
  8. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    PHP самой последней версии ;)
    надо было $0 вместо $1
     
Статус темы:
Закрыта.