2015-05-25 23 views
2

我想解析一個選項卡式文本文件,該文件在單行上包含多個數據部分,區分各部分數據的唯一方法是部分由兩個或多個空格或製表符的間隔分開。基於兩個或更多空格將數據分解爲數組元素

我發現棧上有很多關於將單個空間替換爲單個空間的答案,但一直未能得到任何答案來解決我的問題,我嘗試過使用正則表達式模式來解決這個問題無濟於事。

DER V3,0,0,3323 Xkisjd     2014 02 25 05:23 PGM/RUN BY/DATE 

我正在使用類似這樣的東西,但它不影響數據,我懷疑這是由於數據開始分隔標籤。

preg_split("/\s\s+/", $data, -1, PREG_SPLIT_NO_EMPTY); 

我將不勝感激我的任何幫助或建議。

預期成果將是一個數組:

PGM => DER V3,0,0,3323 
RUN BY => Xkisjd 
DATE => 2014 02 25 05:23 
+0

什麼是您預期的輸出?把你的代碼。 –

+0

@anantkumarsingh,請參閱編輯的問題。 – llanato

+0

你甚至懶得去看一下'preg_split()'函數的文檔嗎?它不改變你交給的'$ data'參數,它返回一個數組。 – arkascha

回答

2

你需要修改你的preg_split一點。檢查了這一點: -

<?php 
$string ='DER V3,0,0,3323 Xkisjd     2014 02 25 05:23 PGM/RUN BY/DATE'; 

echo "<pre/>";print_r(preg_split("/\s\s+/",$string)); 

?> 

輸出: - http://prntscr.com/796wd7

如果你想空間將-取代然後這樣做: -

$data = preg_replace("/\s\s+/", "-", $string); 
echo $data; 

輸出: - http://prntscr.com/7972nf

注: - 它給你一個數組。我希望你知道如何根據你的意願操縱它。謝謝。

我編輯了我的答案,並添加第二個,因爲你的問題有點混亂。我希望它能幫助你,謝謝。

1

如果我正確理解你的問題,你期望的字符串來執行preg_split後更新?

請參考手冊:preg_split將按分隔符分割,所以它會返回一個數組。你需要preg_replace

$data = preg_replace("/\s\s+/", " ", $data); 

這會給你想要的結果。

另注:問題的主題說,你想用一個破折號更換空間()字符( - ),但在你的問題你談到了單個空格更換多個空格

1

我建議另一種方法preg_match_all

Regex

#^([a-z]+\s+[a-z]\d+(?:,\d+)+)\s*(\S+)\s*([\d:\s]+\d)\s*([^\/]+)\s+\/\s+([^\/]+)\s+\/\s+([^\/]+)\s+$#im 

這裏是一個sample code

$re = "/^([a-z]+\\s+[a-z]\\d+(?:,\\d+)+)\\s*(\\S+)\\s*([\\d:\\s]+\\d)\\s*([^\\/]+)\\s+\\/\\s+([^\\/]+)\\s+\\/\\s+([^\\/]+)\\s+$/mi"; 
$str = "DER V3,0,0,3323 Xkisjd     2014 02 25 05:23 PGM/RUN BY/DATE \nVER V1,2,4,0003 MfgHJd     2015 12 11 11:13 PGM/RUN BY/DATE "; 
preg_match_all($re, $str, $matches); 
$cnt = count($matches[0]); 
$arr = array(); 
for ($i = 0; $i < $cnt; $i++) { 
    $arrAdd = array(); 
    $arrAdd[$matches[4][$i].trim()] = $matches[1][$i]; 
    $arrAdd[$matches[5][$i]] = $matches[2][$i]; 
    $arrAdd[$matches[6][$i]] = $matches[3][$i]; 
    array_push($arr, $arrAdd); 
} 
print_r($arr); 

結果:

Array 
(
    [0] => Array 
     (
      [PGM] => DER V3,0,0,3323 
      [RUN BY] => Xkisjd 
      [DATE] => 2014 02 25 05:23 
     ) 

    [1] => Array 
     (
      [PGM] => VER V1,2,4,0003 
      [RUN BY] => MfgHJd 
      [DATE] => 2015 12 11 11:13 
     ) 

) 
相關問題