は、より効率的なソリューションです:
パターン(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[^]]*?(?=\])/
を使用すると最も効率的です。