2017-05-20 10 views
1

header.phpのファイルを見つけるに動作していないPHPのするpreg_match()、VAR

<?php 
echo 'this is example '.$adv['name'].' , this is another.....'; 

空のmain.phpファイル

<?php 

if(preg_match('/$adv[(.*?)]/',file_get_contents('header.php'),$itext)){ 
    echo $itext[1].''; 
} 

ショーは

答えて

1

は、より効率的なソリューションです:

パターン(Demo):

/\$adv\[\K[^]]*?(?=\])/ 

PHPの実装のための:

if(preg_match('/\$adv\[\K[^]]*?(?=\])/','this is example $adv[name]',$itext)){ 
    echo $itext[0]; 
} 

出力​​:

name 

\Kを使用してキャプチャグループを置き換えると、ターゲット文字列が "完全な文字列"の一致で返され、出力配列が効果的に50%削減されることに注意してください。

パターンの個々の部分についての説明のためのデモリンクを見ることができますが、基本的には$adv[と一致し、マッチングポイントをリセットし、角括弧の間のすべての文字をマッチングして閉じ角括弧返された試合には含まれない。

異なる変数名に一致させたい場合は、/\$[^[]*?\[\K[^]]*?(?=\])/を使用できます。これはドル記号に続くadvまたはその他の部分文字列に対応します。無制限の文字と一致させるために.の代わりに[^]]のようなNegated Character Classesを使用すると、正規表現パターンがより効率的に実行されます。

advが入力文字列の決定要素でない場合は、/\$[^[]*?\[\K[^]]*?(?=\])/を使用すると最も効率的です。

2

この正規表現は動作します

/\$adv\[(.*?)\]/ 

\ befoを使ってシンボル$、[、]をエスケープする必要がありますそれらの再 彼らは正規表現で特別な意味を持っているので、ここで