簡體   English   中英

PHP preg_match_all獲取短標簽之間的變量名稱

[英]PHP preg_match_all get name of variable between short tags

我有使用短標簽<?= $some_var; ?>模板文件<?= $some_var; ?> <?= $some_var; ?> 我需要編寫一個腳本來獲取該模板中使用的變量的列表,即像這樣的數組:

[
    0 => '$some_var',
    ...
    n => '$some_var_n'
]

我努力了:

preg_match_all('/<?[^p](.*)?>/s', $file_contents, $matches);

和一些其他各種組合,但沒有運氣。

謝謝。

您需要逃脫? ,否則它們會使前面的字符/組成為可選字符。 您還可以使正則表達式更嚴格,並將正則表達式用於PHP提供的有效變量名( http://php.net/manual/en/language.variables.basics.php )。

就像是:

<\?=\h+(\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+);?\h*\?>

應該找到您的變量。

演示: https : //regex101.com/r/fVBZAS/1/

使用token_get_all

function genTempVar($text) {
    $open = false;
    foreach (token_get_all($text) as $v) {
        if ( $open ) {
            if ( $v[0] == T_CLOSE_TAG ) $open = false;
            elseif ( $v[0] == T_VARIABLE ) yield $v[1];
        } elseif ( $v[0] == T_OPEN_TAG_WITH_ECHO ) $open = true; 
    }
} 

print_r(iterator_to_array(genTempVar($text)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM