Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > регуляр!!


Автор: нуп 10.5.2010, 16:51
В регулярках бот страшный. Надо вытащить всю таблицу начиная от <table class=maintable  до </table>, нужны только те таблицы где встречается символ "№".  class=maintable может написан либо в двойных кавычках, либо в одинарных, либо без кавычек . Вот мой ботокод подправьте плиз
Код

$reg = '|<table class=maintable+(№)+(.*)+</table>|Uis';

 smile 

Автор: SelenIT 11.5.2010, 01:48
Код

$reg = '|<table [^>]*\bclass=(["\']?)maintable\\1[^>]*>(.*№.*)</table>|Uis';

В первом приближении как-то так, видимо.

Автор: brother79 11.5.2010, 05:29
Цитата(SelenIT @  11.5.2010,  05:48 Найти цитируемый пост)
1:


В первом приближении как-то так, видимо.



А во втором так smile :


Код

$reg = '|<table [^>]*\bclass=(["\'])maintable\\1[^>]*>(.*?№.*?)</table>|Uis';


Автор: SelenIT 11.5.2010, 09:16
brother79, сорри, не понял... зачем .*?, когда уже стоит U?

Автор: нуп 11.5.2010, 10:00
Что-то не работает
Код

<table class=maintable border=0 width=100% bgcolor=#D0D0D0 cellspacing=1 cellpadding=3 style='color:'>
<table class="maintable" border=0 width=100% bgcolor=#D0D0D0 cellspacing=1 cellpadding=3 style='color:'>
<table class='maintable' border=0 width=100% bgcolor=#D0D0D0 cellspacing=1 cellpadding=3 style='color:'>

Вот так может быть  smile

Добавлено через 6 минут и 44 секунды
["\']
Как добавить третий вариант,  на отсутствие символа?!

Автор: SelenIT 11.5.2010, 10:23
В моем изначальном варианте он есть, в виде вопроса после скобки. И у меня локально (PHP5.3.2, Ubuntu) с этими примерами работает...

Автор: нуп 11.5.2010, 10:25
Код

<table [^>]*\bclass=(["\'])|()maintable(.*?№.*?)<\/table>

Так работает, но как сделать чтобы находило только для одной таблицы, то есть идет такой код 
Код

<table class=maintable> .... </table>
<table class=maintable>№ </table>
<table class=maintable> .... </table>

мне надо, чтобы нашло только 1 таблицу

Автор: SelenIT 11.5.2010, 10:30
Он и должен найти только вторую таблицу, с №...

Автор: brother79 11.5.2010, 10:32
Цитата(SelenIT @  11.5.2010,  13:16 Найти цитируемый пост)
brother79, сорри, не понял... зачем .*?, когда уже стоит U? 


Sory, просто не пользуюсь этим модификатором, вот и не обратил внимания smile

Автор: нуп 11.5.2010, 10:59
Ваш вариант работает, если есть кавычки. Что можно добавить, что парсило такое class=maintable 

Автор: SelenIT 11.5.2010, 11:08
У меня (["\']?)maintable\\1 работает и с кавычками, и без (все примеры 6-ю постами выше). Правда, возможность пробелов до и после "=" не учитывается.

Автор: нуп 11.5.2010, 11:28
Просто мне выдает весь результат, там 3 таблицы. Использую preg_match_all. А как выводить только то, что у меня в регулярке

Автор: SelenIT 11.5.2010, 11:54
Возможно, где-то лишний преобразователь жадности остался. Должен быть только один - либо ? после .* внутри таблицы, либо модификатор U в конце (как в моем примере).

Автор: нуп 11.5.2010, 14:16
Спасибо всем. Нашел плагин под фф Regular expression tester, очень удобная штука.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)