查找空白注入PHP文件

dot*_*hen 7 php regex bash grep

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

1)不以一个<或一个#字符开头.

和/或

2)不以一个>字符结尾,除非它以一个紧密的括号结束,后面跟着任意数量的换行符.

我认为第一个条件是: $[^<#]

我认为第二个条件是: [ [^>^] | [}\n*^]]

但请注意,在我的天真正则表达式中$,^表示文件的开头和结尾,而不是文件中的任何行.即使有了这些,假设它们是正确的,我将如何组合它们?像这样?

[$[^<#]] | [[ [^>^] | [}\n*^]]]
Run Code Online (Sandbox Code Playgroud)

然后,把它们放在grep中:

grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] *
Run Code Online (Sandbox Code Playgroud)

显然,这不起作用(tm).有人可以教我如何纠正错误吗?谢谢.

这是一个很好的文件:

<?php

?>
Run Code Online (Sandbox Code Playgroud)

这是这样的:

<?php
function someFunc(){
}


?
Run Code Online (Sandbox Code Playgroud)

这也很好:

#!/usr/bin/php -q
<?php
?>
Run Code Online (Sandbox Code Playgroud)

领先的HTML很好:

<html>
<?php
echo '</html>';
?>
Run Code Online (Sandbox Code Playgroud)

尾随HTML也很好:

<?php
echo '<html>';
?>
</html>
Run Code Online (Sandbox Code Playgroud)

这很糟糕(领先换行):

?
<?php

?>
Run Code Online (Sandbox Code Playgroud)

这也很糟糕(领先的空间):

? <?php

?>
Run Code Online (Sandbox Code Playgroud)

这也很糟糕(尾随换行):

<?php

?>
?
Run Code Online (Sandbox Code Playgroud)

Fir*_*Dib 2

很快就抛出了一个表情,我认为这符合你的要求。现在已经很晚了,出于某种原因我在 stackoverflow 上。无论如何,我希望我能满足您的要求。

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

我希望这有帮助。如果我对您有任何误解,请澄清,我会尽力调整表达方式。