当前位置:  开发笔记 > 编程语言 > 正文

在PHP中解析动态文本列表的最佳方法

如何解决《在PHP中解析动态文本列表的最佳方法》经验,为你挑选了1个好方法。

我有一个文本列表,它来自一个名为EVE Online的流行在线游戏,当你在游戏中杀死一个人时,这基本上会被邮寄给你.我正在构建一个工具来解析这些使用PHP来提取所有相关信息.我将需要显示的所有信息,我正在编写类,以便很好地将其分解为相关的封装数据.

2008.06.19 20:53:00

Victim: Massi
Corp: Cygnus Alpha Syndicate
Alliance: NONE
Faction: NONE
Destroyed: Raven
System: Jan
Security: 0.4
Damage Taken: 48436

Involved parties:

Name: Kale Kold
Security: -10.0
Corp: Vicious Little Killers
Alliance: NONE
Faction: NONE
Ship: Drake
Weapon: Hobgoblin II
Damage Done: 22093

Name: Harulth (laid the final blow)
Security: -10.0
Corp: Vicious Little Killers
Alliance: NONE
Faction: NONE
Ship: Drake
Weapon: Caldari Navy Scourge Heavy Missile
Damage Done: 16687

Name: Gistatis Tribuni / Angel Cartel
Damage Done: 9656

Destroyed items:

Capacitor Power Relay II, Qty: 2
Paradise Cruise Missile, Qty: 23
Cataclysm Cruise Missile, Qty: 12
Small Tractor Beam I
Alloyed Tritanium Bar, Qty: 2 (Cargo)
Paradise Cruise Missile, Qty: 1874 (Cargo)
Contaminated Nanite Compound (Cargo)
Capacitor Control Circuit I, Qty: 3
Ballistic Deflection Field I
'Malkuth' Cruise Launcher I, Qty: 3
Angel Electrum Tag, Qty: 2 (Cargo)

Dropped items:

Ballistic Control System I
Shield Boost Amplifier I, Qty: 2
Charred Micro Circuit, Qty: 4 (Cargo)
Capacitor Power Relay II, Qty: 2
Paradise Cruise Missile, Qty: 10
Cataclysm Cruise Missile, Qty: 21
X-Large Shield Booster II
Cataclysm Cruise Missile, Qty: 3220 (Cargo)
Fried Interface Circuit (Cargo)
F-S15 Braced Deflection Shield Matrix, Qty: 2
Salvager I
'Arbalest' Cruise Launcher I
'Malkuth' Cruise Launcher I, Qty: 2

我正在考虑使用正则表达式来解析数据,但是你会如何解决这个问题呢?您会将邮件折叠成一行字符串还是从数组中解析每一行?麻烦的是有一些异常需要考虑.

首先,"参与方:"部分是动态的,并且可以包含许多具有如下结构的人,但是如果计算机控制的敌人也对受害者进行了射击,那么它只会被缩短为"名称"和"伤害"完成'领域,如上所示(Gistatis Tribuni/Angel Cartel).

其次,'Destroyed'和'Dropped'项目是动态的,并且每封邮件的长度都不同,我还需要获得数量,不管它们是否在货物中.

欢迎提出方法.



1> Paul Dixon..:

我可能会采用状态机方法,按顺序读取每一行并根据当前状态处理它.

某些行(如"已删除项目:")会更改状态,从而导致您将以下行解释为项目.在"阅读相关方"状态中,您将每行添加到关于此人的数据数组中,当您读取空白行时,您知道您有完整记录.

这是我在GraphViz中遇到的粗略FSM

状态机

某些边缘将触发代码中的操作,例如读取空白行.

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有