【发布时间】:2011-09-29 10:52:05
【问题描述】:
我有 php 文件,我想删除结束标记 (?>),但前提是它是最后一个结束标记并且后面没有任何内容。
<?php
//some code
?>
<?php
//some other code
?> // <- this and only this should be removed
我尝试了模式 's/(\s*\?>\s*)$//s' 和它的几个突变,但没有成功:它们删除了所有出现的 ?>,破坏了代码,并且我不知道如何匹配EOF。
(是的,我知道一种解决方法:使用例如tail -1 仅检查文件的最后一行,但这会使我的整个代码格式化脚本复杂化,所以如果问题可以通过正确构造的正则表达式来解决,那就是太好了。)
【问题讨论】:
-
您的正则表达式应该可以工作 - 但前提是您将整个文件内容读入一个变量 - 然后解析它。如果您使用
perl -p -i -e 's/(\s*\?>\s*)$//' filename.php之类的内容,则每次处理每一行。显然,这将删除所有出现的情况。