使用perl正则表达式剥离关闭php标记

时间:2011-09-29 10:52:06

标签: php regex perl tags

我有php文件,我想删除结束标记(?>),但前提是它是最后一个结束标记,后面没有任何内容。

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

我已尝试过模式的/(\ s * \?&gt; \ s *)$ // s'及其几个突变,但没有成功:它们会删除所有出现的?&gt;,从而破坏了代码,我不知道如何匹配EOF。

(是的,我知道一种解决方法:使用例如tail -1来检查文件的最后一行,但它会使我的整个代码格式化脚本复杂化,所以如果问题可以通过正确构造的正则表达式来解决,那么会很棒。)

2 个答案:

答案 0 :(得分:2)

我现在有机会测试它。阅读所有文件确实有效。这个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
?>

答案 1 :(得分:0)

好的,让我们打破这个。

你想匹配'?&gt;',所以我们将从('?>')开始,但是从'?'开始在正则表达式中有特殊意义,我们需要逃避它:('\?>')

我们不关心结束标记之前的内容,但我们希望确保在它之后没有任何内容(除了空格)。你差不多花了这笔钱:我们需要\s$。我会这样做:

('\?>')\s*$

希望对你有用。