0

テキストと定数を含むファイルがあります。定数名と定数値を取得するにはどうすればよいですか。問題は、定数値に時々スペースがあることです。私はファイルを読んでfile()からforeach...

例:

define('LNG_UTF-8',         'Universal Alphabet (UTF-8)');
define('LNG_ISO-8859-1',   'Western Alphabet (ISO-8859-1)');
define('LNG_CustomFieldsName', 'Custom Field');
define('LNG_CustomFieldsType', 'Type');

私はすでに試しました:

定数名を取得するには:

$getConstant1 = strpos($mainFileArray[$i], '(\'');
$getConstant2 = strpos($mainFileArray[$i], '\',');              
$const = substr($mainFileArray[$i], $getConstant1 + 2, $getConstant2 - $getConstant1 - 2);

定数値を取得するには

$position1 = strpos($file[$i], '\',');
$position2 = strpos($file[$i], '\');');

$rest = substr($file[$i], $position1 + 3, $position2 - $position1 - 2);

ただし、スペースまたは'、'..の場合は機能しません。

これを常に機能させるにはどうすればよいですか?

4

2 に答える 2

1

これに一致する正規表現は次のようになります。

preg_match("/define\(\s*'([^']*)'\s*,\s*'([^']*)'\s*\)/i", $line, $match);
echo $match[1], $match[2];

http://rubular.com/r/m9plE2qQeTを参照してください。

ただし、これは、文字列が一重引用符'で囲まれている場合、エスケープされた引用符が含まれていない場合、文字列が連結されていない場合などにのみ機能します。たとえば、次のようになります。

define('LNG_UTF-8', "Universal Alphabet (UTF-8)");
define('LNG_UTF-8', 'Universal \'Alphabet\' (UTF-8)');
define('LNG_UTF-8', 'Universal Alphabet ' . '(UTF-8)');
// and many similar

少なくとも最初の2つを機能させるには、PHP解析ルールに従ってPHPファイルtoken_get_all解析し、結果のトークンを調べて必要な値を抽出するために使用する必要があります。
すべてのケースを機能させるには、実際にPHPコード、つまりファイルを評価includeしてから、PHPの定数として定数にアクセスする必要があります。

于 2012-06-25T07:42:49.623 に答える
1

get_defined_constants()そのための関数を使用する必要があります。すべての定数の名前とその値を含む連想配列を返します。

于 2012-06-25T10:19:22.423 に答える