【问题标题】:How to read only part of input如何只读取部分输入
【发布时间】:2011-12-31 00:01:23
【问题描述】:

我试图弄清楚如何从 eve-online kill 邮件中仅读取数据库所需的几行:

2011.12.30 23:26

受害者:Annabel Lust
军团:暗影巨石
联盟:xXDEATHXx 的影子
阵营:无
摧毁:猎豹
系统:C6CG-W
安全性:0.0
受到的伤害:827

相关方:

姓名:米莱娜·杜什
安全性:0.6
公司:nXo
联盟:无畏穿越
阵营:无
船:猎犬
武器:加达里海军祸根鱼雷
造成的伤害:457

被破坏的物品:

姐妹扩展探针发射器
催化冷气电弧喷射推进器
纳米纤维内部结构二
超速喷油器系统 II
硬接线 - Genolution Core Augmentation CA-2(货运)
Nanite Engineering(货运)
Sisters 核心扫描探针,数量:5(货物)
微型辅助动力芯 I(货运)
姐妹深空扫描探测器,数量:5(货物)

掉落物品:

隐秘行动隐形装置 II
姐妹战斗扫描探头,数量:5
曲速干扰器 II
纳米纤维内部结构二
天体测量精确定位(货物)
小型重力电容升级一,数量:2(货运)
打捞者 I(货运)
拦截器(货物)
热力学(货运)
协处理器 I(货物)

当用户将 killmail 输入到多文本框中时,我只需要读取被破坏的项目和丢弃的项目,并将数量放在单独的字符串中。

有没有办法做到这一点?

【问题讨论】:

  • 正则表达式,简单明了。
  • 没有数量的商品是否表示数量为1?

标签: php


【解决方案1】:

您可以使用explode(separator, text) 将文本分成两部分和数组。 例子: $str=explode(":","YourText");

【讨论】:

    【解决方案2】:
    <?php
    $str = "    2011.12.30 23:26
    
        Victim: Annabel Lust
        Corp: Shadow Monolith
        Alliance: Shadow of xXDEATHXx
        Faction: None
        Destroyed: Cheetah
        System: C6CG-W
        Security: 0.0
        Damage Taken: 827
    
        Involved parties:
    
        Name: Milena Dush
        Security: 0.6
        Corp: nXo
        Alliance: Intrepid Crossing
        Faction: None
        Ship: Hound
        Weapon: Caldari Navy Bane Torpedo
        Damage Done: 457
    
        Destroyed items:
    
        Sisters Expanded Probe Launcher
        Catalyzed Cold-Gas Arcjet Thrusters
        Nanofiber Internal Structure II
        Overdrive Injector System II
        Hardwiring - Genolution Core Augmentation CA-2 (Cargo)
        Nanite Engineering (Cargo)
        Sisters Core Scanner Probe, Qty: 5 (Cargo)
        Micro Auxiliary Power Core I (Cargo)
        Sisters Deep Space Scanner Probe, Qty: 5 (Cargo)
    
        Dropped items:
    
        Covert Ops Cloaking Device II
        Sisters Combat Scanner Probe, Qty: 5
        Warp Disruptor II
        Nanofiber Internal Structure II
        Astrometric Pinpointing (Cargo)
        Small Gravity Capacitor Upgrade I, Qty: 2 (Cargo)
        Salvager I (Cargo)
        Interceptors (Cargo)
        Thermodynamics (Cargo)
        Co-Processor I (Cargo)
    ";
    
    var_dump(parseItems('/Destroyed items:(?P<destroyedItems>.*)Dropped items:/is', $str, 1));
    var_dump(parseItems('/Dropped items:(?P<droppedItems>.*)/is', $str, 1));
    function parseItems($regex, $str, $defaultQty = 0){
        preg_match($regex, $str, $match);
        $lines = explode("\n", $match[1]);
        $defaultQty = 0;
        $items = array();
        foreach($lines as $key => $line){
            $line = trim($line);
            if($line != ""){
                $quantity = (strpos($line, "Qty:") != false) ? getQty($line) : $defaultQty;
                $items[] = array($line => $quantity);
            }
        }
        return $items;
    }
    
    function getQty($line){
        preg_match('/, Qty:\s+(?P<quantity>[0-9]+)/', $line, $match);
        return $match['quantity'];
    }
    

    这应该为您提供一系列丢弃和破坏的线及其数量。它返回关联数组,其中key是行,value是数量。

    【讨论】:

    • 阅读问题,而不仅仅是标题。
    • 是的,这对我没有帮助,因为杀死邮件的长度各不相同;)
    • 对不起,我应该没看错。。@Crash2k,我不确定什么是kill mail,它有像上面那样的特定格式吗?
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2016-02-04
    • 2022-12-09
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多