PHP正则表达式创建一个数组

时间:2012-09-20 08:54:13

标签: php regex

我有一个从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)

赞赏任何指导。

感谢。

2 个答案:

答案 0 :(得分:0)

你也可以用explode()

分开每一行
$parts = explode ( $line, '\n' ) ;
print_r ( $parts ) ;

然后用爆炸($ part [$ i],':')打破部件以获取值。

答案 1 :(得分:0)

更具体的正则表达式:

  

描述:\ S *跳闸\ S +状态:\ S +(\ W +)\ S * FLIGHT \ S + INFORMATION:\ S *([^:] +):\ S *来源:\ S *([ \ W \ d _,\ S - (+)] +)\ S +在\ S +(?:太阳|周一|星期二|星期三|星期四|星期五| SAT)

做出以下假设:

  • “状态”只能包含字母。
  • “航班信息”应以:
  • 结尾
  • “from”只能包含字母,数字,其中一个字符_,-()或空白字符。 “from”紧接着是这个序列:“在XXX”,其中XXX是一天(即太阳,周一,周二,周三,周四,周五或周六)。

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