簡體   English   中英

需要幫助解析PHP中的一些數據

[英]Need help parsing some data in PHP

我需要能夠在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>

如果有任何意義的話。 它不需要那么高效,因為我每天大約需要做一次,而且我不介意等待它需要多長時間。

謝謝。 :)

編輯:這是我自己做的:

<?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:提取了Acct:部分,但除此之外,我Acct:至無法理解。

這段代碼將吸收您的整個輸入,並為輸入中的每個記錄生成一個關聯數組:

// 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
}

編輯:我只是看看您發布的代碼。 您確實不需要正則表達式來執行您想做的事情。 在正確的位置使用正則表達式會非常方便,但是在大多數情況下,使用它不是正確的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM