Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 15:10   #1
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию Не могу создать регулярное выражение.

Учусь составлять регулярные выражения и мне могу правильно решить задачу:

Имеется строка: ...<table id="fullcatalog" class="fullcatalog" cellspacing="0" cellpadding="0" border="0" style="line-height:25px"> … </table>....

Нужно найти в строке этот тег и поместить в буфер:

Делаю:

PHP код:
if (preg_match('|(<table id="fullcatalog" class="fullcatalog"[^>]*>.*</table>)|si'$content$matches)) 
    {echo 
$matches[1];} else {echo "Not found";} 
В ответ получаю not found.

Что делаю не так? поправьте =)
Armatus вне форума Ответить с цитированием
Старый 24.11.2013, 15:21   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Регулярное выражение тут лучше не применять, особенно если будут вложенные таблицы.

В глаза бросается присутствие "</table>" - а именно не экранированный символ / . Хотя может в php его и не надо экранировать...
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 24.11.2013, 15:25   #3
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от Fenex Посмотреть сообщение
Регулярное выражение тут лучше не применять, особенно если будут вложенные таблицы.

В глаза бросается присутствие "</table>" - а именно не экранированный символ / . Хотя может в php его и не надо экранировать...
А какой метод на ваш взгляд более оптимальный?
Armatus вне форума Ответить с цитированием
Старый 24.11.2013, 15:34   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Armatus Посмотреть сообщение
Учусь составлять регулярные выражения и мне могу правильно решить задачу:

Имеется строка: ...<table id="fullcatalog" class="fullcatalog" cellspacing="0" cellpadding="0" border="0" style="line-height:25px"> … </table>....

Нужно найти в строке этот тег и поместить в буфер:

Делаю:

PHP код:
if (preg_match('|(<table id="fullcatalog" class="fullcatalog"[^>]*>.*</table>)|si'$content$matches)) 
    {echo 
$matches[1];} else {echo "Not found";} 
В ответ получаю not found.

Что делаю не так? поправьте =)
Код:
if (preg_match ("/(<table\sid=\"fullcatalog.*\/table>)/iUs", $html, $result);
    echo  $result[0];
}
uberchel вне форума Ответить с цитированием
Старый 24.11.2013, 15:49   #5
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Код:
if (preg_match ("/(<table\sid=\"fullcatalog.*\/table>)/iUs", $html, $result);
    echo  $result[0];
}
на основании вашего ответа сделал свою регулярку, но тоже неверно.

PHP код:
if (preg_match('/(<table\sid="fullcatalog"\sclass="fullcatalog"[^>]*>(.*)<\/table>/Usi'$content$matches)) 
{echo 
$matches[1];} else {echo "Not found";} 
Заметил что регулярные выражения записываются в разных видах:

Цитата:
'|выражение|модификаторы'
'выражение'
'/выражение/модификаторы'
В чем разница?
Armatus вне форума Ответить с цитированием
Старый 24.11.2013, 16:05   #6
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Разница в том, что писать | не верно, так как этот метасимвол используется для допускания нескольких вариантов регулярки, разделители лучше писать / или #
Далее к вашей проблеме, вам что конкретно надо вытащить, все что внутри таблицы или вместе с таблицей. В прошлом варианте я вам дал код который вытаскивает все вместе с таблицей.
uberchel вне форума Ответить с цитированием
Старый 24.11.2013, 16:38   #7
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Цитата:
Сообщение от uberchel Посмотреть сообщение
Далее к вашей проблеме, вам что конкретно надо вытащить, все что внутри таблицы или вместе с таблицей. В прошлом варианте я вам дал код который вытаскивает все вместе с таблицей.
Да пардон. нужно вытащить все включая таблицу. Пробую применить ваше регулярное выражение(немного адаптированное под мою строку)- результат прежний.

PHP код:
if (preg_match("/(<table\sstyle=\"line-height:25px\"\sid=\"fullcatalog.*\/table>)/iUs"$content$matches)) 

    {echo 
$matches[1];} else {echo "Not found";} 
Строка имеет вид:

Цитата:
<table style="line-height:25px" id="fullcatalog" class="fullcatalog" border="0" cellpadding="0" cellspacing="0"> ... </table>
внутри строки имеются вложенный таблицы причем эти таблицы такого же вида <table style="line-height:25px" id="fullcatalog" class="fullcatalog" border="0" cellpadding="0" cellspacing="0"> ... </table>
Armatus вне форума Ответить с цитированием
Старый 24.11.2013, 17:01   #8
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

Так работает:
PHP код:
/(<table\sstyle="line-height:25px".*>.*table>)/is 
но не работает так:
PHP код:
/(<table\sstyle="line-height:25px"\sid.*>.*table>)/is 
для строки:

Цитата:
<table style="line-height:25px" id="fullcatalog" class="fullcatalog" border="0" cellpadding="0" cellspacing="0">
Armatus вне форума Ответить с цитированием
Старый 25.11.2013, 11:26   #9
Armatus
Форумчанин
 
Регистрация: 09.05.2009
Сообщений: 122
По умолчанию

В чем моя ошибка? =)
Armatus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу составить регулярное выражение hon PHP 0 24.06.2013 20:50
Регулярное выражение i2save Общие вопросы Delphi 2 21.02.2013 16:29
Регулярное выражение! cashmail PHP 4 12.04.2012 15:36
Регулярное выражение art-programs Общие вопросы Delphi 2 21.02.2012 11:58
регулярное выражение XeN0N Помощь студентам 1 27.01.2009 15:14