【问题标题】:Regex: Parse out lines正则表达式:解析行
【发布时间】:2012-07-08 20:20:36
【问题描述】:

我正在编写一个系统,它可以根据我们在麦当劳收到的日程安排邮件来制定每日日程安排。这是我老板的要求。我在 PHP 中这样做。

我们收到的邮件如下:

最好的隐藏,

Hier is je rooster voor de week van 16-7-2012:

maandag 2012 年 7 月 16 日 17:00 - 23:00,KEU dinsdag 2012 年 7 月 17 日 11:30 - 19:15,COU woensdag 2012 年 7 月 18 日 16:30 - 23:00,KEU

总共 20,25 uur ingeroosterd,3 个班次和 0 个 sluitdiensten。

vrijvraagverzoeken kun je me bereiken 的 Voor vragen 来自:rooster.1197@nl.mcd.com。

Wil je meer werken 的 Ben je verkeerd ingeroosterd en heb je wel goed vrijgevraagd?邮件丹 naar rooster.1197@nl.mcd.com! Ik ga dan kijken wat ik voor je kan doen。

让我们行动! Komende weken moeten er een anantal mensen naar de drive toe! Achter je dienst staat dan DRI。 Het is de bedoeling dat iedereen daar af en toe een dienst gaat werken zodat iedereen genoeg uren kan krijgen。 Dit betekend dus dat iedereen maximaal 每周 1x 在 de drive wordt geroosterd 中。 Jullie dienen op eigen vervoer te gaan。 Dit geldt ook voor de nachtdiensten in de drive。 Er worden altijd groepjes gestuurd dus spreek 遇到了 elkaar af。

格罗滕,

隐藏

我想解析出以下几行:

maandag 16 juli 2012 17:00 - 23:00, KEU
dinsdag 17 juli 2012 11:30 - 19:15, COU
woensdag 18 juli 2012 16:30 - 23:00, KEU

所以我可以循环遍历它们..

我会怎么做,我想通过使用正则表达式,但我不知道怎么做..

斯文

【问题讨论】:

  • 你确定string | date | duration |, KEU的模式不会在这个上下文之外使用吗?
  • 格式如下,始终相同:日[空格]日期[空格]月[空格]年[空格]时间[空格]-[空格]时间,站
  • 是的,电子邮件没有改变
  • 你能告诉我们你做了什么吗?你有没有尝试过?

标签: php regex parsing lines


【解决方案1】:

试试[a-z]*\s[0-9]{1,2}[a-z]*\s[a-z]*\s[0-9]{4}\s[0-9]{2}:[0-9]{2}\s-\s[0-9]{2}:[0-9]{2},\s[a-z]*

测试:http://regexr.com?31fqr :)

【讨论】:

  • 虽然这可能会回答问题,但it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
【解决方案2】:

您可能首先使用更简单的正则表达式提取所有类似的标记:

    $day  = "maandag|dinsdag|woensdag|othertag|andtag|sotag|ontag";
    $reg  = "#($day) (\d+) (\w+) (\d+) (\d+):(\d+) - (\d+):(\d+), (\w+)#smi";
    $days = preg_match_all($reg, $text, $items, PREG_SET_ORDER);

    print_r($items);

每个 $item[] 都将采用以下形式:

    (
        [0] => maandag 16 juli 2012 17:00 - 23:00, KEU
        [1] => maandag
        [2] => 16
        [3] => juli
        [4] => 2012
        [5] => 17
        [6] => 00
        [7] => 23
        [8] => 00
        [9] => KEU
    )

因此您将能够根据需要使用各种元素。

【讨论】:

    【解决方案3】:
    <?php 
    $str = 'Beste HIDE,
    
    Hier is je rooster voor de week van 16-7-2012:
    
    maandag 16 juli 2012 17:00 - 23:00, KEU
    dinsdag 17 juli 2012 11:30 - 19:15, COU
     woensdag 18 juli 2012 16:30 - 23:00, KEU
    
    In totaal ben je 20,25 uur ingeroosterd, 3 shifts and 0 sluitdiensten.
    
    Voor vragen of vrijvraagverzoeken kun je me bereiken via: rooster.1197@nl.mcd.com.
    
      ....';
    
    $data = explode("\n", $str);
    echo $data[4].'<br/>'.$data[5].'<br/>'.$data[6];
    
    ?>
    

    试试这个...

    【讨论】:

    • +1 用于在没有正则表达式开销的情况下完成这项工作。当然,它只有在 $str 的格式保持不变的情况下才会起作用。正如 OP 所述,它会这样做。
    • 我们可以使用文件处理从文件中读取数据并将其存储在一个字符串中......其余功能是相同的。
    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多