0

我有一个从 iCal 中提取的字符串,它输出描述。我想每次都进行描述并用我需要的对象创建一个数组。他们总是遵循相同的模式。

例如我有:

Description: Trip status: Confirmed\n \n FLIGHT INFORMATION: \n \n United Airlines UA 485: \n \n \n From: Newark Liberty International (New York, USA) - TerminalC at Fri, Sep 28, 2012 16:34 (local time) \n To: Denver International (Denver, USA) at Fri, Sep 28, 2012 18:47 (local time) \n Cabin: Economy Restricted\n Duration: 04:13\n Stop(s): 0\n Aircraft: Boeing 757-200\n

进而

Description: Trip status: Confirmed\n \n FLIGHT INFORMATION: \n \n Air Canada AC 1072: \n \n \n From: Denver International (Denver, USA) at Sat, Sep 29, 2012 10:55 (local time) \n To: P Trudeau International (Montreal, Canada) at Sat, Sep 29, 2012 16:29 (local time) \n Cabin: Economy Restricted\n Duration: 03:34\n Stop(s): 0\n Aircraft: Airbus Industrie A319\n

如您所见,不同的输出遵循相同的结构,因此在理想的世界中,我想要:

$itinery[0]: Confirmed
$itinery[1]: United Airlines UA 485
$itinery[2]: Newark Liberty International (New York, USA)

一如既往的任何指导表示赞赏。

谢谢。

4

2 回答 2

0

您还可以使用 explode() 将每一行分开

$parts = explode ( $line, '\n' ) ;
print_r ( $parts ) ;

然后用 explode ( $part[$i], ':' ) 分解零件以获取值。

于 2012-09-20T09:03:52.443 回答
0

更具体的正则表达式:

说明:\s*行程\s+状态:\s+(\w+)\s*FLIGHT\s+INFORMATION:\s*([^:]+):\s*From:\s*([\w\ d_,\s-()]+)\s+at\s+(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat),

做出以下假设:

  • “状态”只能包含字母。
  • “航班信息”应该以:
  • “发件人”只能包含字母、数字、这些字符之一_,-()或空白字符。“from”后面紧跟着这个序列:“at XXX”,其中 XXX 是一天(即 Sun、Mon、Tue、Wed、Thu、Fri 或 Sat)。

提示:
如果状态属于关闭列表,则在正则表达式中替换(\w+)(?:Confirmed|Cancelled|Delayed)。如有必要,添加其他状态。

于 2012-09-20T09:06:40.420 回答