Помогите доработать PCRE для PHP, удаляющее однострочные C-комментарии.

программирование php регулярные выражения комментарии pcre

Изначально в другом моём вопросе (http://otvety.google.ru/otvety/thread?tid=2285324f06325715) для удаления HTML- и C-комментариев, посоветовали применить:
preg_replace('#(/\*[\w\W]*\*/)|((?<=[^:])//.*$)|(<!--.*-->)#','',$a);
Первая подмаска рабочая.
Вторая сбоит (если её убрать - код работает), в логи ничего не пишет.
Третья подмаска HTML-комментарии не удаляла, пришлось поправить так (<!--.*?-->) и теперь она рабочая.
Для обработки UTF-8 вставил модификатор u, чтобы точкой обрабатывать переводы строк как символы, добавил модфикатор s.
Пока выводится:
$a=preg_replace('#(/\*[\w\W]*\*/)|((?<=[^:])\/{2}.*)|(<!--.*?-->)#us','-',$a);
но вот вторую подмаску не получается заставить работать даже отдельно:
$a=preg_replace('#((?<=[^:])\/{2}.*)#u','',$a);
результат - пустой экран.
Также пусто при:
$a=preg_replace('#\/{2}.*#u','',$a);
-------
В $a подаётся страница, после обработки задаю
echo $a.
-------
Мешают какие-то особенности preg_replace в сравнении с mb_eregi_replace наверное.

Примечание:
> Что значит "пустой экран ?"
имел в виду пустую страницу браузера после команды echo $a.
Однако выяснил, что это несовсем так.
$a=preg_replace('#\/{2}.*#u','',$a);
удаляет всё после первой же пары слешей встреченных вы коде страницы (в DTD).

Цель: сделать универсальный метод, очищающий любые входные данные от комментариев в стилях C и HTML.
Начальные данные - код HTML-страницы в текстовом виде, в кодировке UTF-8, в код для теста влагаю все типы комментариев, которые должны программно удаляться. Заминка случилась с кодом, удаляющим однострочные комментарии, начинающиеся парой слешей.

Fred Mercury (Fred Mercury) 03.10.2012, 20:18:05
> > preg_replace('#((?<=[^:])\/{2}.*)#u','',$a);
>бред какой-то, не пойму что должно оно делать, объясните
В подмаске идёт опережающая проверка с отрицанием случая, когда перед парой слешей есть двоеточие.
Даже без неё у меня не получается перевести код для mb_eregi_replace в код для preg_replace, чтобы хотя бы для начала находить все тексты, где встретится сочетание пары слешей и начиная с них удалять всё до конца строки.

Примечание:
$a=preg_replace('/\/\/.*/u','',$a);
Удаляет вообще всё, что после первой же пары слешей в DTD страницы, оставляя:
-------
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-
-------

Примечание:
ПРОШУ ПРОЩЕНИЯ, я удалял симворлы перевода строки до очистки от комментариев. Всё шло одной строкой, соотвественно первая же пара слешей становилась смертельной для последующих символов.
Пока что ошибку исправил вот как:
$a=preg_replace('#((?<=[^:])\/{2}.*)#u','',$a);
Этот код не трогает ссылки, но в DTD, увы, вмешивается.
Сейчас сформирую новый вопрос по PCRE.
Ответы:
Что значит "пустой экран ?"
> preg_replace('#((?<=[^:])\/{2}.*)#u','',$a);
бред какой-то, не пойму что должно оно делать, объясните
Попробуйте так удалять однострочныу комментарии /\/\/.*/mu


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.