preg_match все символы КРОМЕ СТРОКИ

SK
На сайте с 31.08.2007
Offline
81
1124

вот например есть таблица

<tr><td>1</td>--тут много столбцов--<td>super</td>--тут много столбцов--</tr>

<tr><td>2</td>--тут много столбцов--<td>super</td>--тут много столбцов--</tr>

<tr><td>3</td>--тут много столбцов--<td>nosuper</td>--тут много столбцов--</tr>

<tr><td>4</td>--тут много столбцов--<td>super</td>--тут много столбцов--</tr>

нужно выделить строки в которых есть super

очевидно делаем #<tr><td>([\d]+)</td>.+?<td>super</td>.+?</tr>#si

НО! ок кушает вот так целиком

<tr><td>3</td>--тут много столбцов--<td>nosuper</td>--тут много столбцов--</tr>

<tr><td>4</td>--тут много столбцов--<td>super</td>--тут много столбцов--</tr>

нужно как-то уточнить границу поиска, т.е. чтото типа

#<tr><td>([\d]+)</td>[^</tr>]+<td>super</td>.+?</tr>#si

[^</tr>]+ - это не работает, так как ищет не выражение а отдельные символы

и еще - СТРОКИ БЕЗ ПЕРЕВОДА КАРЕТКИ, Т.Е. убрав #si не поможет (тут так написал для лучшего восприятия кода)

есть ли такая возможность вообще? я придумал только выделить все <tr>.+?</tr> и в цикле проверять, либо где --тут много столбцов-- забивать всю эту кучу столбцов в виде <td>.*?</td>

Нужен перенос информации? Информеры на сайт? Сграбить контент? Создать базу товаров? Изготовление любых парсеров! (/ru/forum/836197)
siv1987
На сайте с 02.04.2009
Offline
427
#1
Silent_Kill:
я придумал только выделить все <tr>.+?</tr> и в цикле проверять

Самый лучший вариант. Здесь нет смысла извращаться с регулярными выражениями

speed-core
На сайте с 30.03.2014
Offline
33
#2

http://www.php.net/manual/ru/function.preg-match.php

установи flags, и уже исходя из позиции можно повертеть, обрезать, выдать и т.д. типа обрезать до первого вхождения </tr> включительно...

это как вариант.

HOST-PROTECTION (/ru/forum/848747), профессиональный web хостинг, гарантия стабильности, защита от DDoS.
SK
На сайте с 31.08.2007
Offline
81
#3
speed-core:
http://www.php.net/manual/ru/function.preg-match.php
установи flags, и уже исходя из позиции можно повертеть, обрезать, выдать и т.д. типа обрезать до первого вхождения </tr> включительно...
это как вариант.

flags меняет лишь постоение результирующего массива, эт от так сделать можно

хочется всё в одну регулярку и красиво...

siv1987
На сайте с 02.04.2009
Offline
427
#4

Если уж так сильно хочется

#<tr><td>(\d+)</td>(?:.(?!</tr>))*?<td>super</td>.*?</tr>#si

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий