Удаление комментариев в PHP файлах

12
M
На сайте с 26.10.2011
Offline
1
9656

Всем привет.

Задача такая: Нужно удалить комментарии по типу // из php-кода с помощью Notepad++

Через поиск и замену можно использовать регулярное выражение \//.*

Но оно немного не подходит, так как вместе с комментариями полетят и урлы

http:// и некоторые переменные, которые содержать символы //

Как быть, чтобы удалить комментарии, но при этом сохранить все ссылки и значения переменных!?

ДП
На сайте с 23.11.2009
Offline
203
#1

Не сильно в регулярках notepad++ шарю, а там признак начала строки не поддерживается?

M
На сайте с 26.10.2011
Offline
1
#2

P.s. Я так думаю, для того, чтобы не затрагивались переменные нужно сделать исключение замены, если присутствуют кавычки ' и " (тока я не знаю, как это сотворить через рег.выр.), а вот с урлами, наверное, нужно смотреть по http:

[Удален]
#3

может пробел там ещё стоит перед комментом. можно попробовать кириллицу исключить, если комментарии на ней

M
На сайте с 26.10.2011
Offline
1
#4
klaustrafob:
может пробел там ещё стоит перед комментом. можно попробовать кириллицу исключить, если комментарии на ней

Комменты на латинице. С пробелом клёво придумал, но там некоторые все-таки сплошняком идут //comment, хотя большинство с пробелом // comment

n0name
На сайте с 22.12.2006
Offline
54
#5

Одними регулярками тут не обойтись.

Надо сначала распарсить весь php-файл, определить, где начинаются и заканчиваются строки и только потом вырезать комментарии. Если в php-файлах присутствует текст (за пределами <?php ... ?>), то нужно ещё и этот текст не затронуть.

Сервис сравнения цена на VPS (http://vpska.com/)
M
На сайте с 26.10.2011
Offline
1
#6

Придумал решения проблемы! ☝

1. //_.* (_ - пробел) - удаляет комменты, где сначала пробел, а затем текст. Фишка в том, что в урле не может быть пробел (http:// site.ru). Но не во всех комментах есть пробел в начале (//comment), поэтому п.2.

2. Удалить комментарии, которые стоят в самом начале строки. (можно найти при помощи расширенного поиска \n//). В адресе сайта перед // всегда стоит http: , поэтому урлы изначально не могут быть удалены, значения переменных также сохраняться, т.к. они в кавычках ( "//" ) плюс еще перед ними есть имя переменной. Вопрос в том, как это реализовать с помощью регулярных выражений. Перед //.* нужно указать новую строку, я не знаю как это сделать, подскажите плз.

jpg Untitled-1.jpg
jpg 2.jpg
gormarket
На сайте с 29.12.2010
Offline
47
#7

Не знаком с Notepad++, но когда подобную задачу решал регулярками на PHP, то разбивал файл на строки, в каждой строке удалял начальные пробелы и табы, а затем, если получившаяся строка начиналась с //, то удалял всю эту строку ( 'http://' тут никак не мешают).

А вот с комментариями, начинающимися в строке после PHP-кода сложнее, но в принципе тоже решаемо (например 'http://' заменить сначала на допустим 'http:/', удалить комментарии, а потом вернуть 'http://', но обычно есть еще куча других '//' - в строках, регулярках и т.п.)

Так что в сотни раз проще просто не делать таких комментариев.

Товары и цены в магазинах Вашего города: Городской рынок (http://gormarket.ru/)
n0name
На сайте с 22.12.2006
Offline
54
#8

\n — это знак новой строки

Выражение будет примерно следующим: \n//.*

У вас в коде точно нигде не встречается текст в строках похожий на комментарии? Иначе он тоже удалится.

gormarket:
Не знаком с Notepad++, но когда подобную задачу решал регулярками на PHP, то разбивал файл на строки, в каждой строке удалял начальные пробелы и табы, а затем, если получившаяся строка начиналась с //, то удалял всю эту строку ( 'http://' тут никак не мешают).

Такой алгоритм будет удалять якобы "комментарии" из строк. Пример:

$str = 'Hello

//world

';

//world в данном случае не комментарий, но он удалится.

M
На сайте с 26.10.2011
Offline
1
#9
masterfast:
Придумал решения проблемы! ☝
1. //_.* (_ - пробел) - удаляет комменты, где сначала пробел, а затем текст. Фишка в том, что в урле не может быть пробел (http:// site.ru). Но не во всех комментах есть пробел в начале (//comment), поэтому п.2.
2. Удалить комментарии, которые стоят в самом начале строки. (можно найти при помощи расширенного поиска \n//). В адресе сайта перед // всегда стоит http: , поэтому урлы изначально не могут быть удалены, значения переменных также сохраняться, т.к. они в кавычках ( "//" ) плюс еще перед ними есть имя переменной. Вопрос в том, как это реализовать с помощью регулярных выражений. Перед //.* нужно указать новую строку, я не знаю как это сделать, подскажите плз.

Есть третий случай (клинический 😂), когда коммент без пробела и НЕ в начале строки. В этом случае хз че делать. В ручную - не вариант, нужна автоматизация, иначе крыша съедет выискивать и удалять целую кучу комментов.

jpg 3.jpg
S
На сайте с 23.05.2004
Offline
315
#10

А зачем вообще комментарии из файла удалять ? Если нужен "релиз" вариант то в командной строке выполнить "php -w source.php > release.php"

Это просто подпись.
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий