За последние 24 часа нас посетили 22679 программистов и 1547 роботов. Сейчас ищут 926 программистов ...

Как отучить квантификатор жадничать с начала?

Тема в разделе "PHP для новичков", создана пользователем borus, 26 дек 2012.

  1. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Здравствуйте.

    На странице создал пример, описывающий ситуацию: регвыражение захватывает текст начиная с первого появления символов <tr, начиная с первой строки таблицы.

    Как должно выглядеть регвыражение, чтобы оно соответствовало только второй строке таблицы?
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
  3. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    не подходит, должна выделяться в принципе любая строка, содержащая в одном из столбцов искомую фразу, без привязки к концу таблицы.
    а как в рег выражениях пишется конструкция, которая например запрещает в промежутке символов .+ определенные наборы символов?
    например такой "семантический" шаблон :)
    /<tr>.+(но чтоб между вами не было других <td>)<td>искомая фраза.+?<\/tr>/is
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    вот так и надобыло изначально. описать нормально задачу
    вариант
     
  5. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Благодарю.
    а как доработать ваш пример, чтобы регвыражение захватывало полностью код строки таблицы, т.е. от <tr> до </tr>?
    Структура реальной таблицы следующая:
    <table>
    <tr>
    <td>1/1</td>
    <td>фраза</td>
    </tr>
    <tr>
    <td>2/2</td>
    <td>искомая фраза</td>
    </tr>
    </table>
     
  6. Колбася

    Колбася Активный пользователь

    С нами с:
    12 дек 2011
    Сообщения:
    722
    Симпатии:
    0
    А генератора регулярных выражений нет ни у кого ссылки? или где что скачать? :)
    Ну тоже самое только обратно
     
  7. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Вот такое выражение помогло:
    Код (Text):
    1. /<tr(?!.+?<tr).+?искомая фраза.+?<\/tr>/is
    но оно уже не действует на строке, содержащей html-код таблицы вида:
    Код (Text):
    1. <table>
    2. <tr>
    3. <td>1/1</td>
    4. <td>фраза</td>
    5. </tr>
    6. <tr>
    7. <td>2/2</td>
    8. <td>искомая фраза</td>
    9. </tr>
    10. <tr>
    11. <td>2/2</td>
    12. <td>еще одна строка</td>
    13. </tr>
    14. </table>
    кто-нибудь скажет, почему?
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    вы уже третий раз меняете входные данные.
    мне уже тупо лень в очередной раз переписывать регулярку.
     
  9. borus

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

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    вот такой шаблон посоветовали
    Код (Text):
    1. ~<tr\b[^<>]*+>\s*+<td\b[^<>]*+>[^<>]*+</td>\s*+<td\b[^<>]*+>(искомая фраза[^<>]*+)</td>\s*+</tr>~i
    работает