Как убрать комментарии из источника Php / Html?(с помощью sed / awk / grep и т. д.) - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел бы удалить комментарии из исходного кода PHP-файлов, используя Shell Script или AppleScript.(Я использую хуки приложений Codekit OS X)

Я пытался сделать это с помощью команд sed или grep, но современные коды регулярных выражений, к которым я привык с PHP / javascript, не работают.

https://regex101.com/r/awpFe0/1/

Демонстрации будет достаточно, чтобы сообщить мне, что я хочу сделать.

Мне нужна рабочая версия в командной строке.

Я нашелэто, но я не могу получить именно тот результат, который мне нужен: https://stackoverflow.com/a/13062682/6320082

Я работаю над этим два дня.Пожалуйста, помогите мне.

Пример содержания:

Test string // test comment
Test string// test comment
echo 1;//test comment
http://domain.ltd // test comment
$wrong_slashes = "http://domain.ltd/asd//asd//asd";
function test() { // test comment
Test string /* test comment // test comment */
Test string //test /* test */
Test string /* test comment /* */ */
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
/**
multi-line comments
*/
<script src="//cdn.com/site.js">
$pattern = "([//])";
$pattern = '([//])';
<!-- html comments -->
<div>test</div> <!-- html comments -->
<!-- html comments --> <div>test</div>

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Я решил это, запустив PHP CLI со сценарием оболочки.Я сделал то, что хотел, используя пример в URL с PHP.

пример функции

0 голосов
/ 21 ноября 2018

Если Perl - ваш вариант, попробуйте что-то вроде:

perl -e '
    while (<>) {
        $str .= $_; # slurps all lines into a string for multi-line matching
    }

    1 while $str =~ s#/\*(?!.*/\*).*?\*/##sg;
                    # removes C-style /* comments */ recursively
    $str =~ s#(?<!:)//[^\x27"]*?$##mg;
                    # removes // comments not preceded by ":" and not within quotes
    $str =~ s#<!--.*?-->##sg;
                    # removes <!-- html comments -->
    print $str;
' example.txt

, который выдает:

Test string
Test string
echo 1;
http://domain.ltd
$wrong_slashes = "http://domain.ltd/asd//asd//asd";
function test() {
Test string
Test string
Test string
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

<script src="//cdn.com/site.js">
$pattern = "([//])";
$pattern = '([//])';

<div>test</div>
 <div>test</div>

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

...