ФорумПрограммированиеPHP для идиотов → Народ, помогите с regexp - найти ячейку с нужным текстом!

Народ, помогите с regexp - найти ячейку с нужным текстом!

  • Pasha_Moscow

    Сообщения: 12 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 3:14

    Проще говоря, есть несколько элементов с известными границами <td> и </td>
    <td>….</td>
    <td>…..XXX….</td>
    <td>……</td>

    нужно найти именно тот элемент, который содержит XXX. Кол-во символов внутри элемента  и позиция ХХХ неизвестна.

    пробовал:
    <td>.*XXX.*</td>
    берет от самого первого в тексте <td> до второй границы нужной ячейки.


    <td>..XXX.+?</td>
    получается, только если известно, что между первой границей элемента и XXX именно 2 символа. А где именно находится ХХХ в элементе, заранее неизвестно.
  • ubica

    Сообщения: 530 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 4:17, спустя 1 час 2 минуты 54 секунды


    <td>.*XXX.*</td>

    если ввести условия на html, можно привести к удобной регулярке:
    <td>[^<]*?XXX.*?</td> 
  • Pasha_Moscow

    Сообщения: 12 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 4:29, спустя 11 минут 54 секунды

    Огромное спасибо!
    Но все равно вопрос - почему не работают ленивые квантификаторы, выбирающие как можно меньше символов ?
    Ведь минимальное кол-во символов - это именно <td>12XXX, а не <td>12</td>34<td>56</td>78XX ?
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 30 апреля 2009 г. 4:30, спустя 46 секунд


    Огромное спасибо!
    Но все равно вопрос - почему не работают ленивые квантификаторы, выбирающие как можно меньше символов ?
    Ведь минимальное кол-во символов - это именно <td>12XXX, а не <td>12</td>34<td>56</td>78XX ?

    потмоу что ты совсем не понимаешь как они работают.
    Сапожник без сапог
  • Pasha_Moscow

    Сообщения: 12 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 4:38, спустя 7 минут 57 секунд

    Можно подробнее ?
  • phpdude

    Сообщения: 26632 Репутация: N Группа: в ухо

    Spritz 30 апреля 2009 г. 4:39, спустя 58 секунд

  • ubica

    Сообщения: 530 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 4:41, спустя 2 минуты 37 секунд


    Огромное спасибо!
    Но все равно вопрос - почему не работают ленивые квантификаторы, выбирающие как можно меньше символов ?
    Ведь минимальное кол-во символов - это именно <td>12XXX, а не <td>12</td>34<td>56</td>78XX ?


    он нашел первый тд, затем ищет закрывающий, отстоящий на минимальную подстроку.
  • Pasha_Moscow

    Сообщения: 12 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 4:57, спустя 15 минут 55 секунд



    Огромное спасибо!

    Но все равно вопрос - почему не работают ленивые квантификаторы, выбирающие как можно меньше символов ?
    Ведь минимальное кол-во символов - это именно  <td>12XXX, а не <td>12</td>34<td>56</td>78XX ?


    он нашел первый тд, затем ищет закрывающий, отстоящий на минимальную подстроку.

    в подстроке внутри тегов есть еще ХХХ - это главное условие.
    Т.е. алгоритм
    1. Найти такой <td>, после которого на минимальном расстоянии следует ХХХ,  после которого, в свою очередь, на минимальном расстоянии следует </td>



    Если я после XXX вместо .*? ставлю жадный .*, то он заберет строку после ХХХ до последней </td>  в тексте. То есть в этом случае жадность работает.

    Он назад после обнаружения ХХХ не может пересмотреть   и сократить найденный отрезок от <td> до ХХХ ?
  • ubica

    Сообщения: 530 Репутация: N Группа: Кто попало

    Spritz 30 апреля 2009 г. 7:44, спустя 2 часа 47 минут 14 секунд

    Pasha_Moscow, ну напиши свой автомат, забив на регулярки

Пожалуйста, авторизуйтесь, чтобы написать комментарий!