Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Учебники регулярных выражений
 
Кто сможет составить выражение для такого случая:

Код:
 
<table border=0>
<tr>
   <td>blablablabla<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table></td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Нужно удалить из этого всего кусок "<table border=0><tr><td>blablabla_UNIQTEXT_blablabla</td></tr></table>". Иными словами нужно вырезать текст от "<table" до "</table>" внутри которого есть строка "UNIQTEXT", но при этом не удалить лишнего. В результате должно получиться:

Код:
 
<table border=0>
<tr>
   <td>blablablabla</td>
   <td><table border=1><tr><td>blablabla</td></tr></table>666666</td>
</tr
</table>
 

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 23:26 17-05-2005 | Исправлено: AZJIO, 04:05 09-12-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
Никто вам так и не написал.. в общем вот, набросал по кускам, чтобы было понятнее и это не самый лучший вариант, конечно же, но работает

Код:
$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:43 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо большое.  
Теперь вопрос - как это использовать? Каким образом воспользоваться.

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:05 22-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n

Цитата:
Теперь вопрос - как это использовать? Каким образом воспользоваться.

код в переменной $table
на выходе, после выполнения всех регулярок, получится то, что и просили

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:06 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так?
 

Код:
<?php
$table = 'весь код тут';
 
$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);  
?>

 
Include можно как нибудь использовать, что бы не вставлять каждый раз код в .php файл?

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:14 22-04-2011 | Исправлено: ra1n, 11:15 22-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
да хотя бы так.. но $table после всех регулярок то использовать где то надо.  
и хоть в include - откуда я знаю как у вас там все..

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:16 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
<?php
$table = '123';
 
$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!colspan).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+(colspan=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);  
 
echo "$table";  
 
?>

 
Да у меня будет просто php файл который будет выводить чистый код.
Как вместо 123 использовать include 'source.txt' ??? Не очень php знаю...

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:25 22-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Как вместо 123 использовать include 'source.txt'

www.php.net/get_file_contents

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:25 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здорово, работает!
Самое огромное спасибо Cheery
 

Код:
$table = file_get_contents('source.txt');

 
 
 
Добавлено:
rowspan забыли указать, что бы оставался...  
попробовал добавить рег. выражений, не получилось

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:32 22-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n

Цитата:
попробовал добавить рег. выражений, не получилось

в примере не было, вот и не написал.
ну просто же
везде,где упомянул colspan сделать  
(colspan|rowspan)
должно сработать

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:42 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
<?php
$table = file_get_contents('source.txt');
 
$table=preg_replace('#</?col.*>#siU','',$table);
$table=preg_replace('#<table.*>#siU','<table>',$table);
$table=preg_replace('#<tr.*>#siU','<tr>',$table);
$table=preg_replace('#<td((?!(colspan|rowspan)).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+((colspan|rowspan)=[^\s>]+?)(|.*)>#siU','<td \\1>',$table);
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);  
 
echo "$table";  
 
?>

 
Если colspan и rowspan в разных ячейках - всё ок. А если в одной, то остается только rowspan...
 
 
Было  

Код:
<td width="739" style="border-right:.5pt solid black;
  border-bottom:.5pt solid black;width:556pt" class="xl10211601" rowspan="3" colspan="8">Цены указаны с учетом доставки до
  Москвы, точную стоимость продукции с доставкой на Ваш объект уточняйте у
  менеджеров.</td>

 
Стало

Код:
  <td rowspan="3">Цены указаны с учетом доставки до
  Москвы, точную стоимость продукции с доставкой на Ваш объект уточняйте у
  менеджеров.</td>

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:52 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
с последней неприятность можно справиться? такая замечательная штука получилось и чуть-чуть не хватает до работоспособного варианта

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 21:48 22-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
терпение. у меня было, между прочим, почти 4 утра, когда я писал вам выше.
 

Код:
$table=preg_replace('#</?col.*>#siU','',$table);  
$table=preg_replace('#<table.*>#siU','<table>',$table);  
$table=preg_replace('#<tr.*>#siU','<tr>',$table);  
$table=preg_replace('#<td((?!(colspan|rowspan)).)*>#siU','<td>',$table);
$table=preg_replace('#<td[^>]+((colspan|rowspan)=[^\s>]+?)(|.*)>#siU','<td \\1 \\3>',$table);  
$table=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $table);  

там могут возникнуть лишние пробелы перед > символом.. но это не столь важно

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:10 22-04-2011 | Исправлено: Cheery, 22:11 22-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В очередной раз огромное спасибо! У меня даже интерес появился к PHP =)
Хочу сделать удобным использование - форма, вставляем код таблицы, нажимаем кнопку, получаем чистую таблицу.
Вопрос - это регулярные выражения универсальны? Вы можете привести ситуацию, пример таблицы, которую это регулярное выражение неправильно обработает?

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 11:55 24-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n

Цитата:
это регулярные выражения универсальны?

что значит универсальны? они пишутся под какие то случаи, реализации.
под что то может и не сработать - для этого нужно знать все возможные реализации записей.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:02 24-04-2011 | Исправлено: Cheery, 12:03 24-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Понял. Буду пробовать, время покажет. Вы можете посоветовать хороший ресурс с информацией по регулярным выражениям? Для тех кто абсолютно с ними не знаком?

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 12:18 24-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
без понятия. мне всегда хватало мануалов на php.net

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:26 24-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
фуф... очередной вопрос...
 
Почему при передачи данных из формы результат отличается от результата при передачи данных из файла.
 
Вот что выдает...  

Код:
<td rowspan=\"3\"  colspan=\"8\">Цены указаны с учетом доставки до
  Москвы, точную стоимость продукции с доставкой на Ваш объект уточняйте у
  менеджеров.</td>  

 
Добавлено:
это если через форму отправлять

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 12:51 24-04-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ra1n
какое это имеет отношение к данной теме?
читайте
www.php.net/stripslashes
ps: просто включены magic_quotes

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 12:53 24-04-2011 | Исправлено: Cheery, 12:53 24-04-2011
ra1n



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$result=stripslashes($table);
 
Ваш ps не понял, но вроде как я написал работает
 
 
 
Добавлено:
magic_quotes включены в настройках PHP видимо

Всего записей: 328 | Зарегистр. 22-12-2006 | Отправлено: 13:05 24-04-2011 | Исправлено: ra1n, 13:06 24-04-2011
vegaweb



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите плиз, стоит регулярка

Код:
if (!preg_match("/^[а-яА-ЯёЁ]/",$_GET['name']))

но почему то она пропускает фигню типа
êâåðöèГ-
хотя в ней есть все, кроме русских букаф..
Заранее благодарю.

Всего записей: 107 | Зарегистр. 13-03-2009 | Отправлено: 23:33 24-04-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru