需要正则表达式来解析文本正文

时间:2010-03-27 06:21:55

标签: php regex

我需要一个正则表达式来解析一段文本。基本上假设我们有文本文件,每个文本文件都包含随机文本,但在文本中会有以下格式的行 - 基本上它们是表示飞行腿的格式。

例如:

13FEB2009 BDR7402 1000 UUBB 1020 UUWW FLT

这一行文字总是在一行

第一个单词是DDMMMYYYY

格式的日期

第二个单词可以是任意长度并保留字母数字字符

第三个字是HHMM格式的时间 - 它总是数字

第四个字是位置代码 - 它几乎总是只是字母,但也可能是字母数字

第五个字是格式HHMM的到达时间 - 它总是数字

第六个字是位置代码 - 它几乎总是只是字母,但也可能是字母数字

同一行后面的任何单词都只是定义

文本文件可能包含大量随机文本信息中的一行或多行文本。

我需要一种方法来提取所有这些信息,即文本文件中的这些行,并将它们与它们的整体部分一起存储,如关联数组中所提到的那样分开,所以我有这样的东西:

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

我假设正则表达式在这里是有序的。我正在使用php - 非常感谢帮助人员:)

2 个答案:

答案 0 :(得分: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
  }
}

编辑:修正了失踪的美元布伦丹被抓住了。谢谢!

答案 1 :(得分:0)

可能是函数fgetcsv和str_getcsv可以帮助你。

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

然后你使用这个$ ar_data数组作为索引数组。