Как удалить одиночные комментарии в php?

Я хочу удалить все одиночные комментарии из моего кода. Я использую метод ob_start () с моей функцией обратного вызова. пожалуйста, помогите мне удалить все «// комментарии», используя регулярное выражение. Я использовал это

preg_replace('/\/\/(.*)/','',$html); 

Но это удаление слова, как указано в «". Например, например «http://example.com». Что будет для регулярного выражения для удаления // комментариев

пожалуйста, помогите мне

Вы не можете сделать это надежно. Нет никакой гарантии, что // в любой позиции в файле указывает комментарий в контексте PHP. Это может быть очень удобно содержать в строке, например.

Это можно сделать только с несколькими уступками. Например, если это достаточно, если он ловит // comments в одной строке, то это будет вариант с менее ложными срабатываниями:

 $source = preg_replace('#^\s*//.+$#m', "", $source); 

Реальное решение будет использовать парсер языка, но это, очевидно, излишнее. Поэтому попробуйте добавить некоторые эвристики, чтобы избежать удаления неправильной оккурации.

Возможно, лучшим способом было бы использовать сам движок PHP, возможно, используя token_get_all() . Эта функция будет обозначать PHP-скрипт, поэтому вы можете просматривать его точно так же, как PHP просматривает его, и, следовательно, удалять или заменять комментарии.

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

  preg_replace('/.*?:?(\/\/.*)/','',$html); 

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

Однако, как упоминалось выше, использование токенизатора – лучший и надежный способ сделать это. На самом деле есть пример того, как удалять комментарии из файла PHP в комментариях на man-страницах php.net, см. Здесь . Это может послужить хорошей отправной точкой для сервера, но я рекомендовал проверить это для себя. Код в комментариях на man-страницах php.net часто может быть немного изворотливым.

Если вы хотите минимизировать свой PHP-код, почему бы не использовать php_strip_whitespace () ?

Если у вас нет другой альтернативы, могу ли я предложить. Хотя производительность является мудрым, это не лучший подход.

 $lines = explode("\n", $source); $lines = array_map( function($line) { return preg_replace("@\s*//.*$@", '', $line); }, $lines ); $source = implode("\n", $lines); 
 function stripPhpComments($code) { $tokens = token_get_all($code); $strippedCode = ''; while($token = array_shift($tokens)) { if((is_array($token) && token_name($token[0]) !== 'T_COMMENT') || !is_array($token)) { $strippedCode .= is_array($token) ? $token[1] : $token; } } return $strippedCode; }