0

PHP ファイル内の特定の関数呼び出しの前にある docblock を取得しようとしています。通常のアプローチとの違いは、関数定義の docblock を解析しようとしていないことです。

サンプルファイル:

<?php
$data = get_data($id);

if ( empty( $data->random ) ) {
  /**
  * Brief description
  *
  * @since 1.0
  * @param int $var Variable
  */
  do_function( 'identifier', $var );
  exit;
}

// random comment
$status = get_random_function($post);
?>

do_function解析するさまざまなファイルのさまざまな場所に表示されます。私が取得して解析しようとしているのは、関数呼び出しを含む先行する docblock です。

ファイルにはクラスが含まれていないため、Reflection クラスはオプションではないため、空の配列を返す次の RegExp に行き詰まっています。

preg_match_all('/(\/\*.+\*\/)[\s]{0,}do_function/m', $filecontent_as_string, $results);

ここで何が間違っていますか?ありがとう!

4

2 に答える 2

1

次のようにして、より単純な正規表現を作成できます。

#(?s)(/\*(?:(?!\*/).)+\*/)\s+do_function#

正規表現101のデモ

(?s)#(/\*(?:(?!\*/).)+\*/)\s+do_function#sフラグ ( )として設定でき、.一致する改行を作成します。

/\*docblock の先頭に一致します。

(?:(?!\*/).)+を除くすべての文字に一致します*/

\*/docblock の末尾に一致します。

\s+do_functiondo_functionが見つかるまでスペースと改行に一致します。

于 2013-09-09T20:46:21.490 に答える