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]   

> Без описания
hippp
Отправлено: 20 Июня, 2010 - 17:57:15
Post Id


Новичок


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


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




Друзья, не сможете подсказать. Сам уже замотался. Не помогает даже Regex.

В тексте страницы присутствует несколько многострочных блоков такого вида:

<!--
....................
....................
....................
//-->

<div>бла-бла-бла</div>

<!--
....................
....................
....................
//-->

Мне нужно удалить "<!--" и "//--> ", но так, чтобы не пострадали комментарии "<!-- ...... -->", а также другой текст внутри этих блоков и между ними.

Инструкция (?s:(.*|\s*) не помогает, т.к. захватывает весь текст от первого "<!--" до последнего "//--> ".

Надеюсь только на вас...


Отредактировано модератором: Champion, 20 Июня, 2010 - 18:09:17
Убрал смайлы из регулярок)
 
 Top
Champion Супермодератор
Отправлено: 20 Июня, 2010 - 18:11:27
Post Id



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


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


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




preg_replace('#<!--.+//-->#mUsi', '', $src)
(Добавление)
preg_replace('#<!--(.+)//-->#mUsi', '\1', $src) - если внутренности комментария должны остаться. Я не понял из вопроса должны или не должны они остаться
 
 Top
hippp
Отправлено: 20 Июня, 2010 - 18:38:06
Post Id


Новичок


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


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




Champion пишет:
preg_replace('#<!--.+//-->#mUsi', '', $src)
(Добавление)
preg_replace('#<!--(.+)//-->#mUsi', '\1', $src) - если внутренности комментария должны остаться. Я не понял из вопроса должны или не должны они остаться


Champion, огромное спасибо за ответ. Но я наверное непонятно объяснил. Приведенная тобой инструкция всегда захватывает весь текст от первого "<!--" и до "//-->". А ведь первым может идти обычный однострочный комментарий, который трогать не надо. Вот так, например:

<!-- Комментарий -->

<!--
..............
..............
//-->
 
 Top
Champion Супермодератор
Отправлено: 20 Июня, 2010 - 18:50:40
Post Id



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


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


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




Аа, да. Не так понял.
CODE (text):
скопировать код в буфер обмена
  1. preg_replace('#<!--(?:(?!-->).)+//-->#mUsi', '', $src)
А так?
 
 Top
hippp
Отправлено: 20 Июня, 2010 - 19:02:16
Post Id


Новичок


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


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




Champion пишет:
Аа, да. Не так понял.
CODE (text):
скопировать код в буфер обмена
  1. preg_replace('#<!--(?:(?!-->).)+//-->#mUsi', '', $src)


Champion, ты лучший! Теперь все работает как надо. Еще раз тебе спасибо. Улыбка

(Отредактировано автором: 20 Июня, 2010 - 19:03:04)

 
 Top
Phantik
Отправлено: 21 Июня, 2010 - 19:15:39
Post Id


Посетитель


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


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




Champion, а скажи пожалуйста что означает в регулярках #, #mUsi ? Читал несколько документаций по теме, но с решетками не встречался. И еще про символ : тоже интересно было бы узнать.

(Отредактировано автором: 21 Июня, 2010 - 19:18:37)

 
 Top
EuGen Администратор
Отправлено: 22 Июня, 2010 - 10:49:44
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




# - разделитель, им может быть что угодно, не встречающееся в выражении (чаще всего используется "/")
m - мультистрочное выражение
U - использовать многобайтовую кодировку (юникод)
i - не учитывать регистр при проверке на совпадение


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Мелкий Супермодератор
Отправлено: 22 Июня, 2010 - 14:01:11
Post Id



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


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


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




EuGen пишет:
U - использовать многобайтовую кодировку (юникод)

ммм?
http://php.su/lessons/?lesson_17
Цитата:
U - инвертирует жадность.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 22 Июня, 2010 - 14:25:03
Post Id



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


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


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




EuGen пишет:
U - использовать многобайтовую кодировку (юникод)
Если буква u маленькая то это разумеется так - но при использовании этого модификатора надо быть осторожным и лучше использовать его вместе с функциями mb-строк http://webew[dot]ru/posts/1836[dot]webew?v=f


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 22 Июня, 2010 - 19:02:07
Post Id



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


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


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




Phantik пишет:
И еще про символ :
(?:шаблон) - такой шаблон не будет запомнен в подмаску. Если просто скобки написать, то результат запомнится. А он нам не нужен, поэтому ?:.
 
 Top
EuGen Администратор
Отправлено: 23 Июня, 2010 - 10:45:48
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Верно, не посмотрел, что U а не u. Сетовать на зрение не буду. Аудитории спасибо за внимательность.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
JustUserR
Отправлено: 23 Июня, 2010 - 14:22:27
Post Id



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


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


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




Phantik пишет:
И еще про символ : тоже интересно было бы узнать
При построении регулярных выражений также часто используюся операторы просмотра вперед и назад - они нужны для того чтобы при составлении некоторого соответствия смотреть его контекст не включая его самого в соответствие http://ru[dot]wikipedia[dot]org/wiki/%D0[dot][dot][dot]0[dot]B7[dot]D0[dot]B0[dot]D0[dot]B4


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 23 Июня, 2010 - 17:59:13
Post Id



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


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


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




Просмотр вперед и назад - это другое. Здесь просто группировка символов, чтобы потом применить к ним, например, *, +, {3,7} - такую вещь.
Вот такую строчку если взять "asfsfd",
то /a(?:sf)+d/ сматчит ее,
а вот просмотр вперед:
/a(?=sfsf)d/ - так не сматчит,
/a(?=sfsf)sfsfd/ - а так сматчит.

Т.е. разница в том, что при просмотре вперед мы стоим на месте.
 
 Top
JustUserR
Отправлено: 24 Июня, 2010 - 15:34:15
Post Id



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


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


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




Champion пишет:
Просмотр вперед и назад - это другое. Здесь просто группировка символов, чтобы потом применить к ним, например, *, +, {3,7} - такую вещь.
Спасибо но я это знаю - просто раз выше пошел разговор о синтаксических единицах регулярных выражений - то я решил упомянуть о конструкции просмотра вперед/назад которая по синтаксису похоже на незапоминающие круглые скобки Улыбка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Champion Супермодератор
Отправлено: 24 Июня, 2010 - 18:16:20
Post Id



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


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


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




Champion пишет:
Спасибо но я это знаю
Да в общем-то я не сомневался. Просто уточнил, потому что фразу двояко понял.
 
 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