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
Форумы портала PHP.SU :: Версия для печати :: Вопрос по составлению регулярного выражения
Форумы портала PHP.SU » PHP » Регулярные выражения » Вопрос по составлению регулярного выражения

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

1. waraxeman - 05 Июля, 2009 - 17:10:27 - перейти к сообщению
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> на пробел
2. chaynyk - 05 Июля, 2009 - 21:46:48 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $icontent = preg_replace("/<(td).*?(class)=\"(c0)\"(.|n)*?<\/(td)>/i", " ", $icontent);
  3.  


С учетом того , что
CODE (text):
скопировать код в буфер обмена
  1. class="c0"
является уникальным на странице
3. IOpeH - 06 Июля, 2009 - 02:55:56 - перейти к сообщению
waraxeman, если конкретно такую строку заменить надо, то регулярка не требуется

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

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

preg_replace("/\<td.+?\<\/td\>/ms", ' ', $str)
4. waraxeman - 06 Июля, 2009 - 12:39:27 - перейти к сообщению
А как сделать так если в местах !Х! неопределенное количество пробелов, табуляции и перевод каретки, в разных последовательностях?
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. ....
5. chaynyk - 06 Июля, 2009 - 14:28:06 - перейти к сообщению
(.|n)*?
6. waraxeman - 06 Июля, 2009 - 14:43:35 - перейти к сообщению
Вот так заработало
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>

Объясните значение когда использую ? и когда без него...
7. jPhp - 26 Августа, 2009 - 14:59:05 - перейти к сообщению
Доброго дня! Решил не создавать новую тему и написать свои вопросы тут...
1)Можно ли осуществлять поиск по регулярному выражению в определенном промежутке текста, скажем по смещению с 138 - по 542 ?
***

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

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


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

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

В первом же случае используется ? - "лекарство от жадности", можно еще использовать модификатор U, благодаря ему сначала ищется <td>, а потом самый первый тег </td>
8. Champion - 26 Августа, 2009 - 15:27:31 - перейти к сообщению
jPhp пишет:
по смещению с 138 - по 542 ?
это означает, что сначала идет 137 любых символов: .{137} а вот по 542 ... это уже проверить длину найденных соответствий.
2 - надо пример. Может быть потому, что нужен многострочный поиск
3 - это утверждение о последующих символах.

Подробнее в разделе формуа Уроки PHP

 

Powered by ExBB FM 1.0 RC1