2017-09-27 19 views
0

私は正規表現でPHP |正規表現

$f = function($doc) 
{ 

$data = []; 

preg_match_all("/[\s]*[\/\*\s]*(.+)[\/\*\s]*/i", $doc, $matches); 

var_dump($matches); 

}; 


$f(" 
    /** 
    * test 
    * 
    * @param string \$comment 
    * 
    * @return array 
    */ 

    "); 

ダンプ(それがあるべきようにすべてがある)のキャプチャに問題がある:私はこの

$f("/** @var array ___TEST___ */"); 

ダンプを行う場合

array(3) { 
    [0]=> 
    string(4) "test" 
    [1]=> 
    string(22) "@param string $comment" 
    [2]=> 
    string(13) "@return array" 
    } 

を:

array(1) { 
    [0]=> 
    string(34) "@var array ___TEST___ */" 
    } 

なぜ最後の2文字(* /)でキャプチャされるのですか?

+0

と一致する理由ですか?私はあなたがキャラクタークラスを使ってここでミスしていると思う。キャプチャグループ1に '@var array ___TEST___'が必要ですか?この質問のタイトルも良いものではありません。質問が何を求めているのかを詳しく説明するタイトルを付ける必要があります。 – chris85

+0

[これはできます](https://regex101.com/r/Uem2BC/1)? –

+1

正規表現を使ってホイールを再作成するのではなく、[phpDocumentorのReflectionDocBlock](https://github.com/phpDocumentor/ReflectionDocBlock) –

答えて

0

だから[\/\*\s]*

あなたの角括弧は、括弧の中から任意の一文字を意味し、ここからそれを打破することができます。

\は、エスケープ文字であるので、\/が一致を意味同様に/

\*はその後\s手段は、任意の空白文字にマッチ試合*

を意味します。

*大括弧の後には欲張りになるので、無制限に一致する可能性があります。

あなたの文字列は、その後、空白文字(マッチ)、*(マッチ)、/(マッチ)

で終了し、それが期待されている何