За последние 24 часа нас посетили 19377 программистов и 1655 роботов. Сейчас ищут 1135 программистов ...

Разделение окончания

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

  1. eaglenix

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

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Есть окончания и слово:
    PHP:
    1.  
    2. $okon = array("ь", "а", "я", "ями", "ев", "е", "о", "и");
    3. $slovo = "лошадями";
    4.  
    Нужно что бы окончание искалось только в конце слова. Если окончания нет выводится слово целиком. А если есть то загнать их в две переменные корень и окончание.
    Прошу помочь, мучаюсь уже целый день.
     
  2. eaglenix

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

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Вот сдалал, остался вопрос каким образом окончание отдельно в переменную вывести, через explode? Или есть более гуманный способ?
    PHP:
    1. $okon = '/(и|ями|я|й|ь)$/';
    2. $text = "лошадями";
    3. $text = preg_replace("$okon", '<span style="background:#eef938">\1</span>', $text);
    4. echo $text;
     
  3. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    PHP:
    1.  
    2. <?php
    3. /**
    4.   * (c) Apple
    5.  */
    6.  
    7. // Окончания
    8. $postfixes = array("ь", "а", "я", "ями", "ев", "е", "о", "и");
    9.  
    10. // Слово
    11. $text = "лошадями";
    12.  
    13.  
    14. /**
    15.  * Преобразование текста и окончаний для обработки
    16.  */
    17. $postfix = implode('|', $postfixes);
    18.  
    19. if(preg_match('/('.$postfix.')$/six', $text, $match)) {
    20.     $text = preg_replace('/('.$postfix.')$/si', '<span style="background:#eef938">$1</span>', $text);
    21.     $postfix = $match[1];
    22. } else $postfix = "";
    23.  
    24. // Смотрим ...
    25. echo "<b>Слово:</b> ${text} <br /><b>Окончание:</b> ${postfix}";
    26.  
    27. ?>
     
  4. eaglenix

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

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Спасибо работает!