preg_replace удалить слово. Помогите с регуляркой

Тема в разделе "PHP", создана пользователем sone, 17 мар 2010.

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

    sone Создатель

    Регистр.:
    11 апр 2008
    Сообщения:
    10
    Симпатии:
    0
    Приветствую.
    Прошу помощи, нужно удалить слово из предложения.

    "нени Тогда, когда мне"

    Слово нени может быть любым кириллическим с любым кол-вом букв (либо несколько слов), с него начинается предложение, всегда с прописной, после него стоит пробел и Заглавная буква другого слова. нени нужно удалить вместе с пробелом, либо удалить все до первой заглавной буквы.
    С простыми регулярками разбирался, но тут что-то никак.
     
  2. _null

    _null Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    16
    Симпатии:
    1
    Че за "нени"?
     
  3. sone

    sone Создатель

    Регистр.:
    11 апр 2008
    Сообщения:
    10
    Симпатии:
    0
    Собственно, чтоб не было таких вопросов, это недослово нужно убрать )
    Есть предложения, которые начинаются с конца предыдущего, т.е. "нени" - это кусок какого-то слова. Подобных много, в основном набор букв. Само предложение начинается с первой большой буквы, все, что до него с маленькой - лишнее.
     
  4. _null

    _null Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    16
    Симпатии:
    1
    Напиши пример, что есть и что нужно сделать.
     
  5. sone

    sone Создатель

    Регистр.:
    11 апр 2008
    Сообщения:
    10
    Симпатии:
    0
    Есть много строк с текстом, например:
    PHP:
    $texp "ека их нет Тогда, когда мне нужно, их всегда нет.";
    $zamtexp preg_replace("(/(а-я)/","",$texp);
    Требуется регулярка, которой эти слова "ека их нет " - лишние, заменить на пустое место "". В других случаях эти слова могут быть любыми, но начинаются всегда с маленькой буквы, а заканчиваются большой буквой следующего предложения, в данном примере буква "Т" от слова "Тогда".


    Решение найдено:
    /[^А-ЯЁЧЙ]+(?=[А-ЯЕЧЙ])/
     
  6. _null

    _null Создатель

    Регистр.:
    24 мар 2008
    Сообщения:
    16
    Симпатии:
    1
    Я так понял, ты пропустил точку перед "Тогда" в своем примере. Хотя точка и не гарантирует конец предложения, как впрочем, и Большая буква не гарантирует его начала.
    Пример: "проживающий по ул. Ленина 15. Следовательно не"

    Короче, никто ничего не гарантирует, на то они и регулярные выражения. :) Так что, надо понимать все ограничения данного метода.

    Учитывая, что предложение может заканчиваться точкой или восклицательным знаком, регулярка может выглядить например так:

    preg_replace('/^.*?[\.!]+\s*?([A-ZА-ЯЁ])/', '\1',$texp);
     
Статус темы:
Закрыта.