2010-03-27 75 views
0

我需要一個正則表達式來解析文本主體。基本上假設我們有文本文件,每個文本文件都包含隨機文本,但在文本中會有以下格式的行 - 基本上它們是表示飛行支線的格式。需要正則表達式來解析文本主體

如:

13FEB2009 BDR7402 1000 UUBB 1020 UUWW FLT 

文本的這條線總是在一行

第一個字的格式爲DDMMMYYYY日期

第二個字可以是任何長度並按住字母字符

第三個字是格式爲HHMM的時間 - 其始終爲數字

第四個字是位置代碼 - 它幾乎永遠只是字母,但也可能是字母數字

第五字格式HHMM到達時間 - 它始終數字

第六字是位置代碼 - 它幾乎總是隻是字母,但也可以是字母數字

隨後在同一行的任何話都只是定義

一個文本文件,可以大量的隨機文本信息文本的一個或多個這樣的行中包含的內容。

我需要一種方法能夠在一個文本文件中與他們作爲一個關聯數組中提到,所以我有這樣的事情分開組成部分,即提取所有這些信息只是這些行,並將其儲存:

array('0'=>array('date'=>'', 'time-dept'=>'', 'flightcode'=>'',....)) 

我假設正則表達式將在這裏。我在使用PHP的這一點 - 將不勝感激幫助傢伙:)

+0

你有沒有嘗試過,並卡住了?你能向我們展示你的嘗試嗎? – 2010-03-27 06:35:25

+0

不幸的是,正則表達式很不幸..事實上,我正在嘗試使用字符串比較函數,但它成了一個混亂的方式... – Ali 2010-03-27 07:27:35

回答

2

我不是在一個位置,以測試這一點,我的PHP是生鏽,但我認爲這應該做你需要的東西:

foreach ($lines as &$line) { 
    $matchcount = preg_match('/([0-9]{2}[A-Z]{3}[0-9]{4}) ([A-Z0-9]+) ([0-9]{4}) ([A-Z0-9]+) ([0-9]{4}) ([A-Z0-9]+)/', $line, $matches); 
    if ($matchcount > 0) { 
    $flight_data = array('date'=>$matches[1], 'flightcode'=>$matches[2], 'time-dept'=>$matches[3], 'loc1'=>$matches[4], 'time-arrv'=>$matches[5], 'loc2'=>$matches[6]); 
    // then do something with flight_data here 
    } 
} 

編輯:修正了缺失的$的Brendan抓到的。謝謝!

+0

它工作正常。你唯一缺少的是一對'$'('matches'需要'$ matches')。 – 2010-03-27 06:55:21

+0

真棒!像魅力一樣工作 - 我實際上可以理解表達!感謝一百萬的幫助:) – Ali 2010-03-27 08:10:33

0

可能是函數fgetcsv和str_getcsv可以幫助您。

$str_data = "blablabal"; 
$ar_data = str_getcsv($str_data, ' ', ''); 

然後你使用這個$ ar_data數組作爲索引數組。