7

を使用してすべての PHP 変数を見つけるにはどうすればよいですかpreg_match。次の正規表現を作成しました。

$string = 'Hallo $var. blabla $var, $iam a var $varvarvar gfg djf jdfgjh fd $variable';
$instring = array();
preg_match_all('/\$(.*?)/', $string, $instring);
print_r($instring);

正規表現の仕組みがわかりません。

4

4 に答える 4

22
\$(.*?)

PHP 変数名に一致する正しい正規表現ではありません。このような変数名の正規表現は、実際には PHP マニュアルの一部であり、次のように指定されています (先頭のドル記号は省略します)。

[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

だからあなたの場合、私は試してみます:

\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)

代わりに。次の例を参照してください

<?php
/**
 * Find all PHP Variables with preg_match
 *
 * @link http://stackoverflow.com/a/19563063/367456
 */

$pattern = '/\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/';

$subject = <<<'BUFFER'
Hallo $var. blabla $var, $iam a var $varvarvar gfg djf jdfgjh fd $variable
BUFFER;

$result = preg_match_all($pattern, $subject, $matches);

var_dump($result);
print_r($matches);

出力:

int(5)
Array
(
    [0] => Array
        (
            [0] => $var
            [1] => $var
            [2] => $iam
            [3] => $varvarvar
            [4] => $variable
        )

    [1] => Array
        (
            [0] => var
            [1] => var
            [2] => iam
            [3] => varvarvar
            [4] => variable
        )

)

PHP で正規表現がどのように機能するかを理解したい場合は、PHP マニュアルと、使用される正規表現方言 (PCRE) のマニュアルを読む必要があります。また、 「Mastering Regular Expressions」という良い本もあります。これを読むことをお勧めします。

同様に参照してください:

于 2013-10-24T10:12:47.853 に答える
1

回答ありがとうございます。とても助かりました。

これは正規表現の精巧なバージョンで、検索結果を少なくとも数値インデックスと論理否定を前に付けた配列変数に展開します。

function get_variables_from_expression($exp){
    $pattern = '/((!\$|\$)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*[0-9\[\]]*)/';
    $result = preg_match_all($pattern,$exp,$matches);
    return($matches[0]);
}

$example = '(($aC[5][7][1]xor((((!$a[5]&&!$a[4])&&!$a[3])&&!$a[2])&&$aC[6][6][0]))xor$aC[6][6][2])';
$list = get_variables_from_expression($example);

foreach($list as $var){
    echo "$var<br>";
}

結果:

$aC[5][7][1]
!$a[5]
!$a[4]
!$a[3]
!$a[2]
$aC[6][6][0]
$aC[6][6][2]
于 2017-11-11T06:54:09.873 に答える