Уберите закрывающий тег php с помощью perl regex - PullRequest
2 голосов
/ 29 сентября 2011

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

<?php
  //some code
?>
<?php
  //some other code
?> // <- this and only this should be removed

Я пробовал pattern 's /(\ s * \?> \ s *) $ // s 'и несколько его мутаций, но безуспешно: они удаляют все вхождения?>, нарушая код, и я не знаю, как сопоставить EOF.

(Да, я знаю обходной путь: использование, например, tail -1 для проверки только последней строки файла, но это усложнит весь мой сценарий форматирования кода, поэтому, если проблема может быть решена с помощью правильно сконструированного регулярного выражения,было бы здорово.)

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

У меня теперь была возможность проверить это.Чтение всех файлов работает.Этот Perl-код работал для меня:

local $/;
open FH, "<", "tmp.php";
$var = <FH>;
print "$var\n\n";
close FH;
$var =~ s/(\s*\?>\s*)$//s;
print "$var\n";

на следующий код PHP:

<?php
//some code
?>
<?php
//some other code
?>
0 голосов
/ 29 сентября 2011

ОК, давайте разберемся с этим.

Вы хотите сопоставить '?>', Поэтому мы начнем с ('?>'), но с '?' имеет особое значение в регулярном выражении, нам нужно избежать его: ('\?>').

Нам не важно, что находится до закрывающего тега, но мы хотим убедиться, что после него нет ничего (кроме пробелов). Вы были в значительной степени на деньгах с этим: нам нужны \s и $. Я бы сделал это так:

('\?>')\s*$

Надеюсь, что это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...