Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос по составлению регулярного выражения

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
waraxeman
Отправлено: 05 Июля, 2009 - 17:10:27
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




CODE (text):
скопировать код в буфер обмена
  1. ....
  2.    <td class="c0" title="">
  3.  
  4.         <img src="http://www.xxx.ru/images/0.gif" class="uds" alt="">
  5.    </td>
  6. ....


Как составить рег. выраж. для того чтобы заменить выше приведенный код в тексте на пробел.

Пробывал так:
CODE (text):
скопировать код в буфер обмена
  1. $icontent = preg_replace("/(<td class=\"c0\" title=\"\">)*(<\/td>)/", " ", $icontent);

не работает, заменяет только </td> на пробел

(Отредактировано автором: 05 Июля, 2009 - 17:11:44)

 
 Top
chaynyk
Отправлено: 05 Июля, 2009 - 21:46:48
Post Id



Гость


Покинул форум
Сообщений всего: 118
Дата рег-ции: Сент. 2007  
Откуда: MOSCOW


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $icontent = preg_replace("/<(td).*?(class)=\"(c0)\"(.|n)*?<\/(td)>/i", " ", $icontent);
  3.  


С учетом того , что является уникальным на странице


Отредактировано модератором: Champion, 06 Июля, 2009 - 08:43:47
За цитирование целиком предыдущего сообщения штрафовать начну


-----
Чайник в PHP и SEO,http://fleshky[dot]ru
 
 Top
IOpeH
Отправлено: 06 Июля, 2009 - 02:55:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 175
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




waraxeman, если конкретно такую строку заменить надо, то регулярка не требуется

str_replace('текст, который будет заменен', ' ', 'текст в котором проводим замену')

а если регуляркой, то так:

preg_replace("/\<td.+?\<\/td\>/ms", ' ', $str)
 
 Top
waraxeman
Отправлено: 06 Июля, 2009 - 12:39:27
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




А как сделать так если в местах !Х! неопределенное количество пробелов, табуляции и перевод каретки, в разных последовательностях?
CODE (text):
скопировать код в буфер обмена
  1. ....
  2. <td class="c0" title="">
  3. !Х!
  4. <img src="http://www.xxx.ru/images/0.gif" class="uds" alt="">
  5. !Х!
  6. </td>
  7. ....

(Отредактировано автором: 06 Июля, 2009 - 12:40:00)

 
 Top
chaynyk
Отправлено: 06 Июля, 2009 - 14:28:06
Post Id



Гость


Покинул форум
Сообщений всего: 118
Дата рег-ции: Сент. 2007  
Откуда: MOSCOW


Помог: 0 раз(а)




(.|n)*?


-----
Чайник в PHP и SEO,http://fleshky[dot]ru
 
 Top
waraxeman
Отправлено: 06 Июля, 2009 - 14:43:35
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Вот так заработало
CODE (text):
скопировать код в буфер обмена
  1. (<td class="c0" title="">)((.|\s)*?)(</td>)


Объясните почему когда использую
CODE (text):
скопировать код в буфер обмена
  1. (<td class="c0" title="">)[b]((.|\s)*)[/b](</td>)
а код выглядит так:
CODE (text):
скопировать код в буфер обмена
  1.    <td class="c0" title="">
  2.  
  3.         <img src="http://i.gismeteo.com/images/icons/old/d.c0.gif" class="clouds" alt="">
  4.  
  5.  
  6.    </td>
  7.  
  8.  
  9.    <td class="c1" title="2009-07-06 0">
  10.         <img src="http://icons/n.c0.gif" class="clouds" alt="">
  11.    </td>
  12.  
  13.  
  14.  
  15.    <td class="c2" title="2009-07-06 6">
  16.  
  17.         <img src="http:///icons/old/d.c1.gif" class="clouds" alt="">
  18.    </td>

то весь код подходит под шаблон, а когда первый вариант использую, то все как надо, только:
CODE (text):
скопировать код в буфер обмена
  1. <td class="c0" title="">
  2.  
  3.         <img src="http://i.gismeteo.com/images/icons/old/d.c0.gif" class="clouds" alt="">
  4.  
  5.  
  6.    </td>

Объясните значение когда использую ? и когда без него...

(Отредактировано автором: 06 Июля, 2009 - 14:59:03)

 
 Top
jPhp
Отправлено: 26 Августа, 2009 - 14:59:05
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Авг. 2009  


Помог: 0 раз(а)




Доброго дня! Решил не создавать новую тему и написать свои вопросы тут...
1)Можно ли осуществлять поиск по регулярному выражению в определенном промежутке текста, скажем по смещению с 138 - по 542 ?
***

2)Почему не корректно работает шаблон #<script.+script>#Uis для preg_replace? Иногда он пропускает <script type="text/javascript"> и особенно часто в конце документа ничего не удаляет.
***

3) Для чего используется конструкция "(?>)" ?
(Добавление)
waraxeman пишет:
Объясните значение когда использую ? и когда без него...


Все очень просто, регулярные выражения сами по себе "жадные" т.е. пытаются захватить как можно больше.

Другими словами, во втором коде сначала ищется <td>, a потом самый последний подходящий по условию </td>.

В первом же случае используется ? - "лекарство от жадности", можно еще использовать модификатор U, благодаря ему сначала ищется <td>, а потом самый первый тег </td>
 
 Top
Champion Супермодератор
Отправлено: 26 Августа, 2009 - 15:27:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




jPhp пишет:
по смещению с 138 - по 542 ?
это означает, что сначала идет 137 любых символов: .{137} а вот по 542 ... это уже проверить длину найденных соответствий.
2 - надо пример. Может быть потому, что нужен многострочный поиск
3 - это утверждение о последующих символах.

Подробнее в разделе формуа Уроки PHP
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB