1

PHP 変数は次の形式にすることができ、文字、数字、およびアンダースコアを含めることができます。

$var_1
$var_1[key_1]
$var_1['key_1']
$var_1["key_1"]
$var_1[key_1][key_2]
$var_1['key_1']['key_2']
$var_1["key_1"]["key_2"]
$var_1->property_1
$var_1->property_1->property_2

配列とオブジェクトには、ネストされた要素が 2 つ以上含まれることはありません。オブジェクトにはメソッドがありません (つまり$var_1->method_1()、必要ありません)。

それらすべてに一致する正規表現、または次の形式の HTML エコー スニペットに変換する最小量のいくつかの正規表現が必要です。

<?=$1?>

$1一致した文字列全体はどこにありますか。同じ正規表現に定数を追加することが可能であれば、それは完璧です:

CONST_1 into <?=CONST_1?>
4

1 に答える 1

2

これは、与えられた例に対してそれを行う必要があります:

\$\w+(?:\[(["']|)\w+\1\]|->\w+){0,2}

に置き換えます(は最初のキャプチャであり、一致全体ではないため、<?=$0?>必ず を使用してください)。かなりトリッキーだと思うので、定数は含めませんでした (予約済みのキーワードではなく定数であることをどのようにして知ることができますか? すべてのキーワードを含めますか?)。01

正規表現の説明:

\$         # literal $
\w+        # letters, digits, underscores
(?:        # subpattern to match indexing or a member
   \[      # literal [
   (["']|) # a ', a " or nothing (capture it in group 1)
   \w+     # letters, digits, underscores
   \1      # the correct matching closing delimiter
   \]      # literal ]
|          # or
   ->      # literal ->
   \w+     # letters, digits, underscores
){0,2}     # end of subpattern, repeat 0 to 2 times

PHP 内でこのパターンを使用する場合は、'.

于 2012-12-07T19:28:29.427 に答える