0

この種のデータをPHPで解析できるようにする必要があります。

 Acct: 1 
 email       : bleh@gmail.com 
 status      : online 
 -------------------------------------------------- 

 Acct: 2 
 email       : dfgg@fgfg.com     
 status      : banned 
 -------------------------------------------------- 

 Acct: 3 
 signedupname  : SomeUsername     
 somethingelse  : offline 
 -------------------------------------------------- 

ご覧のとおり、データはほとんどランダムです。同じままである唯一のことは、-----各エントリとAcct: 1ビットを分離することです。:データの各ビットを表す変数と同様に、それぞれの間のパディングは頻繁に変更されます。

私は正規表現を使用してすべてを自分で調べて解析しようとしましたが、適切に実行できるほど十分なスキルを持っていません。この最後に、次のようなデータが必要です。

Acct: <integer>
var1: <string>
var2: <string>

それがまったく意味があるのなら。私はこれを1日に1回程度行う必要があり、必要な期間を待つことを気にしないので、それほど効率的である必要はありません。

ありがとうございました。:)

編集:これは私が自分でしたことです:

<?php

$data = file_get_contents('records.txt');
$data = explode('******** Saved Host list with acct/variables ********', $data);
$data = explode('--------------------------------------------------', $data[1]);

foreach($data as &$dataz)
{
    $dataz = trim($dataz);
}

$data = str_replace('Acct:', "\nAcct:", $data);

foreach($data as $dataz)
{
    preg_match('/Acct: (.*)/', $dataz, $match);
    $acct = $match[1];
    preg_match('/: (.*)/', $dataz, $match);
    $var1 = $match[1];
    echo $var1;
}

?>

パーツを抽出するところまでは行きましAcct:たが、それ以上のことは頭を動かすことができません。

4

1 に答える 1

1

このコードは、入力全体を受け取り、入力内の各レコードの連想配列を生成します。

// replace ----- with actual number of dashes
foreach (explode('-----', $input) as $entry) {
  $entry = trim($entry);
  $record = array();
  foreach (explode("\n", $entry) as $line) {
    $parts = explode(':', $line);
    $varname = trim($parts[0]);
    $value = trim($parts[1]);
    $record[$varname] = $value;
  }
  // Do anything you want with $record here
}

編集:あなたが投稿したコードを見たところです。やろうとしていることに対して正規表現は本当に必要ありません。正規表現は、適切な場所で使用すると非常に便利ですが、ほとんどの場合、使用するのは適切ではありません。

于 2010-08-16T23:25:17.883 に答える