我有php文件,我想删除结束标记(?>),但前提是它是最后一个结束标记,后面没有任何内容。
<?php
//some code
?>
<?php
//some other code
?> // <- this and only this should be removed
我已尝试过模式的/(\ s * \?&gt; \ s *)$ // s'及其几个突变,但没有成功:它们会删除所有出现的?&gt;,从而破坏了代码,我不知道如何匹配EOF。
(是的,我知道一种解决方法:使用例如tail -1
来检查文件的最后一行,但它会使我的整个代码格式化脚本复杂化,所以如果问题可以通过正确构造的正则表达式来解决,那么会很棒。)
答案 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*$
希望对你有用。