7

PHPファイルの空白は問題になることがあるので、一般的な問題の基準を満たすファイルを見つけようとしています。これらの条件の一方または両方を持つすべてのファイルを再帰的に検索しようとしています。

<1)または#文字で始まらない。

および/または

2)>改行がいくらでも続く閉じ中括弧で終わらない限り、文字で終わらない。

最初の条件は次のようになると思います。$[^<#]

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

あなたが望むことをすると思う表現を本当に素早く投げ出しました。ここではかなり遅く、何らかの理由でスタックオーバーフローを使用しています。いずれにせよ、あなたの要求が正しかったことを願っています。

この正規表現を試してください/\A(?:\s+.*>|[^<#].*>\s*|<.*>\s+)\Z/s。ここで説明: http://regex101.com/r/cT7eY5

これが助けになることを願っています。誤解を招いた場合は、明確にしてください。表現を調整します。

于 2012-09-14T00:30:55.340 に答える