7

PHP 文件中的空格有时会出现问题,因此我试图找到符合常见问题标准的文件。我正在尝试以递归方式查找具有以下一种或两种条件的所有文件:

1) 不以<or#字符开头。

和/或

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

?>
‏
4

1 回答 1

2

很快就提出了一个我认为可以满足您要求的表达方式。这里已经很晚了,出于某种原因,我在 stackoverflow 上。无论如何,我希望我得到了你的要求。

试试这个正则表达式/\A(?:\s+.*>|[^<#].*>\s*|<.*>\s+)\Z/s。在这里解释:http ://regex101.com/r/cT7eY5

我希望这会有所帮助。如果我以任何方式误解了您,请澄清,我会尝试调整表达方式。

于 2012-09-14T00:30:55.340 回答