За последние 24 часа нас посетили 20188 программистов и 1651 робот. Сейчас ищут 2144 программиста ...

Не работают обратные ссылки внутри регулярного выражения

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

  1. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Не работают обратные ссылки внутри регулярки. Код сделан на основе примера из книги, без обратных ссылок поставленную задачу решить нельзя, до этого ими не пользовался. Решил попробовать, а тут облом.

    Мой код:
    PHP:
    1. <?
    2.     $message_y1 = "response and responsibility";
    3.     $message_n1 = "response and sensibility";
    4.     $message_y2 = "sense and sensibility";
    5.     $regexp = "/(sens|respons)e and \1ibility/Usi"; //\одинibility
    6.    
    7.     echo "<pre>";
    8.     preg_match($regexp,$message_y1,$matches);
    9.     var_dump($matches);
    10.     preg_match($regexp,$message_y2,$matches);
    11.     var_dump($matches);
    12.     preg_match($regexp,$message_n1,$matches);
    13.     var_dump($matches);
    14.     echo "</pre>";
    15. ?>
    16.  
    Ответ:
    Код (Text):
    1. array(0) {
    2. }
    3. array(0) {
    4. }
    5. array(0) {
    6. }
    Кто знает, в чём может быть проблема?
    Еще сразу вопрос... кто знает, как можно вызвать по обратной ссылке последнее вхождение, вхождение перед последним вхождением, вхождение после последнего вхождения? В PERL такое есть, а вот есть ли в PCRE не знаю.
     
  2. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Паттерн или в одинарные кавычки или эскейпь обратный слеш (т.е. \\)
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а разве там точкуз-звездочку или типа того не надо вместо слеша?
     
  4. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Одинарные кавычки помогли, спасибо огромное!

    igordata, мне нужно, чтобы выполнялось условие, что следующий такой же, как предыдущий, а не произвольное совпадение
     
  5. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    titch
    мне нужно, чтобы выполнялось условие, что следующий такой же, как предыдущий, а не произвольное совпадение
    я даже не понял что ты сейчас сказал. буду читать...
     
  7. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    igordata
    Тебе нужно, к примеру, захватить теги <div> и </div>, но парсишь ты не HTML, а XML, где теги задает кто-то произвольно.
    Как поступишь?
    Вот тут и будут нужны обратные ссылку: <([a-z]+?)>(.*?)</\\1>
    Т.е условие второго зависит от того, что захватил первый.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, т.е. я могу написать \1 и он остановится в своих поисках?