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 :: Повторяющиеся многострочные блоки
Мне нужно удалить "<!--" и "//--> ", но так, чтобы не пострадали комментарии "<!-- ...... -->", а также другой текст внутри этих блоков и между ними.
Инструкция (?s:(.*|\s*) не помогает, т.к. захватывает весь текст от первого "<!--" до последнего "//--> ".
Надеюсь только на вас...Отредактировано модератором: Champion, 20 Июня, 2010 - 18:09:17 Убрал смайлы из регулярок)
Champion
Отправлено: 20 Июня, 2010 - 18:11:27
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
preg_replace('#<!--.+//-->#mUsi', '', $src) (Добавление)
preg_replace('#<!--(.+)//-->#mUsi', '\1', $src) - если внутренности комментария должны остаться. Я не понял из вопроса должны или не должны они остаться
hippp
Отправлено: 20 Июня, 2010 - 18:38:06
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010
Помог: 0 раз(а)
Champion пишет:
preg_replace('#<!--.+//-->#mUsi', '', $src) (Добавление)
preg_replace('#<!--(.+)//-->#mUsi', '\1', $src) - если внутренности комментария должны остаться. Я не понял из вопроса должны или не должны они остаться
Champion, огромное спасибо за ответ. Но я наверное непонятно объяснил. Приведенная тобой инструкция всегда захватывает весь текст от первого "<!--" и до "//-->". А ведь первым может идти обычный однострочный комментарий, который трогать не надо. Вот так, например:
<!-- Комментарий -->
<!--
..............
..............
//-->
Champion
Отправлено: 20 Июня, 2010 - 18:50:40
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009
Помог: 0 раз(а)
Champion, а скажи пожалуйста что означает в регулярках #, #mUsi ? Читал несколько документаций по теме, но с решетками не встречался. И еще про символ : тоже интересно было бы узнать.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
# - разделитель, им может быть что угодно, не встречающееся в выражении (чаще всего используется "/")
m - мультистрочное выражение
U - использовать многобайтовую кодировку (юникод)
i - не учитывать регистр при проверке на совпадение
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 22 Июня, 2010 - 14:01:11
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Покинул форум
Сообщений всего: 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/
Champion
Отправлено: 22 Июня, 2010 - 19:02:07
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Phantik пишет:
И еще про символ :
(?:шаблон) - такой шаблон не будет запомнен в подмаску. Если просто скобки написать, то результат запомнится. А он нам не нужен, поэтому ?:.
EuGen
Отправлено: 23 Июня, 2010 - 10:45:48
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Верно, не посмотрел, что U а не u. Сетовать на зрение не буду. Аудитории спасибо за внимательность.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
JustUserR
Отправлено: 23 Июня, 2010 - 14:22:27
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Champion
Отправлено: 23 Июня, 2010 - 17:59:13
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Просмотр вперед и назад - это другое. Здесь просто группировка символов, чтобы потом применить к ним, например, *, +, {3,7} - такую вещь.
Вот такую строчку если взять "asfsfd",
то /a(?:sf)+d/ сматчит ее,
а вот просмотр вперед:
/a(?=sfsf)d/ - так не сматчит,
/a(?=sfsf)sfsfd/ - а так сматчит.
Т.е. разница в том, что при просмотре вперед мы стоим на месте.
JustUserR
Отправлено: 24 Июня, 2010 - 15:34:15
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Champion пишет:
Просмотр вперед и назад - это другое. Здесь просто группировка символов, чтобы потом применить к ним, например, *, +, {3,7} - такую вещь.
Спасибо но я это знаю - просто раз выше пошел разговор о синтаксических единицах регулярных выражений - то я решил упомянуть о конструкции просмотра вперед/назад которая по синтаксису похоже на незапоминающие круглые скобки
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Champion
Отправлено: 24 Июня, 2010 - 18:16:20
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Champion пишет:
Спасибо но я это знаю
Да в общем-то я не сомневался. Просто уточнил, потому что фразу двояко понял.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.