2

if. _

私はそのような出来事のソースをgrepしようとしています。単純なケースで PHP で動作する式を作成しましたが、誰かがそれを最適化したり、より興味深いケースを処理したりできるかどうか疑問に思っていました。

サンプル:

if ($var = 3)       //MATCH
if($var = 3)        //MATCH
if($var=3)          //MATCH
if ( $var = 3)      //MATCH
if ($var == $var2)  
if ($var = $var3)   //MATCH
if ( $var === 7)
if( $var == 8 || $var = 9) //MATCH
if (($var == 7 ) && ($var ==10))

単純なケースは によって適切に処理さif\s*\([\$a-zA-Z\d\s]*=[\$a-zA-Z\d\s]*\)れますが、サンプルの下部にある拡張バージョンで機能するものを考え出すとよいでしょう。

より良い表現のアイデアはありますか?

4

2 に答える 2

4

正規表現は、コードを解析するための最良のツールではありません。

ほとんどの言語には、コードをチェックするリンティング ツールがあります。私は PHP の経験がありませんが、ここで多くの指針を見つけることができます: PHP ファイル用の [Lint のような] 静的コード アナライザーはありますか?

于 2012-12-09T22:36:51.483 に答える
3

まず、次のようなケースがないと仮定しましょう (C の例):

if ((a = b) == c)

これらのケースを理解するには実際のパーサーが必要だからです。

簡単に言えば、一致させたいが、一致させたく=ないということです==\+。したがって:

if\([^=]\|==\+\)*[^=]=[^=]\([^=]\|==\+\)*$

内容:

  • if: 最初の if に一致します。
  • [^=]: 任意の文字=
  • ==\+:=====
  • \([^=]\|==\+\)*: ではない=か、またはで==あるすべて===。これには、すべての空白、先頭(、末尾)などが含まれます。これは、分離された の前後の両方にあり=ます。
  • [^=]=[^=]: 孤立して=います。
于 2012-12-09T22:53:42.937 に答える