【发布时间】:2012-09-07 02:19:10
【问题描述】:
PHP 文件中的空格有时会出现问题,因此我试图找到符合常见问题标准的文件。我正在尝试以递归方式查找具有以下一种或两种条件的所有文件:
1) 不以 < 或 # 字符开头。
和/或
2) 不以> 字符结尾,除非它以紧跟大括号且后跟任意数量的换行符结尾。
我认为第一个条件是:$[^<#]
我认为第二个条件是:[ [^>^] | [}\n*^]]
但是,请注意,在我幼稚的正则表达式中,$ 和 ^ 代表文件的开始和结束,而不是文件中的任何行。即使有了这些,假设它们是正确的,我将如何组合它们?像这样?
[$[^<#]] | [[ [^>^] | [}\n*^]]]
然后,将它们放入 grep:
grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] *
显然,这是行不通的 (tm)。有人可以教我如何纠正错误吗?谢谢。
这是一个很好的文件:
<?php
?>
是这样的:
<?php
function someFunc(){
}
这也很好:
#!/usr/bin/php -q
<?php
?>
前导 HTML 很好:
<html>
<?php
echo '</html>';
?>
尾随 HTML 也可以:
<?php
echo '<html>';
?>
</html>
这很糟糕(领先的换行符):
<?php
?>
这也很糟糕(前导空格):
<?php
?>
这也很糟糕(尾随换行符):
<?php
?>
【问题讨论】:
-
避免此问题的最简单方法之一是不在文件末尾包含结束
?>。这是有效的 PHP,并且包含在许多主流 PHP 编码标准中,包括 PEAR 编码标准。以?>结尾的文件是自找麻烦。 -
您可能会考虑的一个想法:打开输出缓冲,
include()文件,并查看包含它时它生成的输出是否有前导/尾随空格。 -
您可以使用
phptags --warn *.php。 -
两件事:你必须使用
-Egrep(或 egrep)选项来打开高级正则表达式。第二个:^是开头,$是一行的结尾,而不是相反。