2

以下に示すデータは、「名前」:「値」、「名前 2」:「値 2」、「名前 3」:「値 3」のような形式です。

$datadump = '"Waived":"Waived", "Until":" until", "HeaderBanInfo":"Ban Info", "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';

PHPを使用して名前を抽出しようとしていました

    $pattern = '/"(.*?)":/si';
preg_match_all($pattern, $datadump, $output);

しかし、それは機能していません。それを修正することを知っている誰かが私を助けてくれることを願っています。ありがとうございました。

4

6 に答える 6

0

これはあなたを助けるかもしれません(私はあなたが出力したいフォーマットがわかりません)

$datadump = '"Waived":"Waived", "Until":" until", "HeaderBanInfo":"Ban Info",      "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';

print_r(explode(':',str_replace(',',':',$datadump)))

出力:

[0] => "Waived"
[1] => "Waived"
[2] =>  "Until"
[3] => " until"
[4] =>  "HeaderBanInfo"
[5] => "Ban Info"
[6] =>       "StatusLabel"
[7] => "Current Status
[8] => "
[9] =>  "StatusBanned"
[10] => "BANNED"
[11] =>  "StatusWarned"
[12] => "WARNED"
[13] =>  "StatusSuspended"
[14] => "SUSPENDED"
[15] =>  "StatusActive"
[16] => "ACTIVE"
于 2014-05-25T12:42:23.757 に答える
0

これを試してください $pattern = '/\"([a-zA-Z0-9]*?)\":/si';

于 2014-05-25T13:40:52.367 に答える
0

入力文字列は JSON であるため、preg_match_all を使用する必要はありません。データ形式を使用することをお勧めします。

print_r(array_keys(json_decode('{' . $datadump . '}', true)));

PHP マニュアル:
json_decode
array_keys

あなたのパターンについて:を含むあらゆる種類の文字を許可する
ため、機能しません。正規表現エンジンは、文字列を左から右に 1 文字ずつ処理し、できるだけ早く一致を返します。これが、2番目の結果が次の理由です。.*?""Waived", "Until":

これらの結果を回避するに"は、ドットの代わりに否定文字クラスを使用することを禁止する方法があります
/"([^"]+)":/ (これを使用すると、遅延量指定子は不要になることに注意してください)。

于 2014-05-25T14:21:14.710 に答える
0

わかりました、あなたの質問からは、どの名前が必要かが明確ではありません。以下のコードは、任意の名前を取得する方法を示しています。

名を取得する場合:

$datadump = '"Waived":"Waived", "Until":" until", "HeaderBanInfo":"Ban Info", "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';

$pattern_for_1st_name = '/"([a-zA-Z:\s]*?)":/';

preg_match_all($pattern_for_1st_name, $datadump, $output);

var_dump($output[1]);

これにより、ペアの最初の名前が出力されます。

array(8) { [0]=> string(6) "Waived" [1]=> string(5) "Until" [2]=> string(13) "HeaderBanInfo" [3]=> string(11) "StatusLabel" [4]=> string(12) "StatusBanned" [5]=> string(12) "StatusWarned" [6]=> string(15) "StatusSuspended" [7]=> string(12) "StatusActive" } 

2 番目の名前を取得する場合:

ペアの 2 番目の名前が必要な場合のパターンは次のとおりです。

 $pattern_for_2nd_name = '/:"([a-zA-Z:\s]*?)"/';

 preg_match_all($pattern_for_2nd_name, $datadump, $output);

 var_dump($output[1]);

これにより、2 番目の名前が出力されます。

array(8) { [0]=> string(6) "Waived" [1]=> string(6) " until" [2]=> string(8) "Ban Info" [3]=> string(15) "Current Status:" [4]=> string(6) "BANNED" [5]=> string(6) "WARNED" [6]=> string(9) "SUSPENDED" [7]=> string(6) "ACTIVE" }

Current Status:あなたのデータに実際に単語が含まれているのか、それともコロンがタイプミスだったのかはわかりません。したがって、一致するコロンも含めました。

于 2014-05-25T13:52:49.220 に答える
0

これはうまくいきます:

$datadump = '"Waived":"Waived", "Until":" until", "HeaderBanInfo":"Ban Info",      "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';
$pattern = '/\"([a-zA-Z\s]*?)\":/si';
preg_match_all($pattern, $datadump, $output);
$names = $output[1];
echo $names[2]; /* this is a simple test */

EDIT (英数字の名前のみ)

$datadump = '"a0":"Waived", "Until":" until", "HeaderBanInfo":"Ban Info",      "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';
$pattern = '/\"([a-zA-Z0-9]*?)\":/si';
preg_match_all($pattern, $datadump, $output);
$names = $output[1];
for($i=0; $i<sizeof($names); $i++)
   echo $names[$i] . "\n";

EDIT2 (名前とコロンの間にスペースを入れることができます)

$datadump = '"a0" : "Waived", "Until":" until", "HeaderBanInfo":"Ban Info",      "StatusLabel":"Current Status:", "StatusBanned":"BANNED", "StatusWarned":"WARNED", "StatusSuspended":"SUSPENDED", "StatusActive":"ACTIVE"';
$pattern = '/\"([a-zA-Z0-9]*?)\"[\s]*:/';
preg_match_all($pattern, $datadump, $output);
$names = $output[1];
for($i=0; $i<sizeof($names); $i++)
   echo $names[$i] . "\n";
于 2014-05-25T12:29:42.887 に答える
0

私の解決策を確認してください:

json_decode('{'.$datadump.'}');

于 2014-05-25T15:11:47.200 に答える