0

kNO = "Get this value now if you can";

その文字列からどのように取得Get this value now if you canしますか?簡単そうに見えますが、どこから始めればいいのかわかりません。

4

3 に答える 3

2

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
于 2012-06-04T05:26:39.343 に答える
1

parse_ini_fileその入力を取得する方法に応じて、またはを使用できますparse_ini_string。とてもシンプル。

于 2012-06-04T05:38:13.910 に答える
1

文字クラスを使用して、開いている引用符から次の引用符への抽出を開始します。

$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文字進めて、バックスラッシュに続くエスケープ文字を効果的にスキップします。このパターンが一致を停止するのは、エスケープされていない唯一の二重引用符が検出されたときだけです。

于 2012-06-04T05:28:16.020 に答える