Ниже у меня есть список текстов, это из популярной онлайн-игры под названием 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).
Во-вторых, элементы «Уничтожено» и «Выброшено» являются динамическими и будут иметь разную длину в каждом письме, и мне также нужно будет получить количество и независимо от того, находятся ли они в грузе.
Идеи для подхода приветствуются.