kNO = "Get this value now if you can";
その文字列からどのように取得Get this value now if you can
しますか?簡単そうに見えますが、どこから始めればいいのかわかりません。
PHP PCREを読むことから始めて、例を参照してください。あなたの質問のために:
$str = 'kNO = "Get this value now if you can";';
preg_match('/kNO\s+=\s+"([^"]+)"/', $str, $m);
echo $m[1]; // Get this value now if you can
説明:
kNO Match with "kNO" in the input string
\s+ Follow by one or more whitespace
"([^"]+)" Get any characters within double-quotes
parse_ini_file
その入力を取得する方法に応じて、またはを使用できますparse_ini_string
。とてもシンプル。
文字クラスを使用して、開いている引用符から次の引用符への抽出を開始します。
$str = 'kNO = "Get this value now if you can";'
preg_match('~"([^"]*)"~', $str, $matches);
print_r($matches[1]);
説明:
~ //php requires explicit regex bounds
" //match the first literal double quotation
( //begin the capturing group, we want to omit the actual quotes from the result so group the relevant results
[^"] //charater class, matches any character that is NOT a double quote
* //matches the aforementioned character class zero or more times (empty string case)
) //end group
" //closing quote for the string.
~ //close the boundary.
編集、エスケープされた引用符を考慮したい場合もあります。代わりに次の正規表現を使用してください。
'~"((?:[^\\\\"]+|\\\\.)*)"~'
このパターンは、頭を包むのが少し難しいです。基本的に、これは2つの可能な一致に分割されます(正規表現OR文字で区切られます|
)
[^\\\\"]+ //match any character that is NOT a backslash and is NOT a double quote
| //or
\\\\. //match a backslash followed by any character.
ロジックは非常に単純です。最初の文字クラスは、二重引用符または円記号を除くすべての文字に一致します。引用符または円記号が見つかった場合、正規表現はグループの2番目の部分と一致しようとします。バックスラッシュの場合は、もちろんパターンに一致します\\\\.
が、一致を1文字進めて、バックスラッシュに続くエスケープ文字を効果的にスキップします。このパターンが一致を停止するのは、エスケープされていない唯一の二重引用符が検出されたときだけです。