2012-07-09 149 views
0

我正在写一个系统,可以根据我们在麦当劳得到的日程安排邮件制作每日日程表。这是我老板的要求。我在PHP中这样做。正则表达式:解析出行

我们得到的邮件如下:

贝斯特隐藏,

海尔是乙脑公鸡VOOR日一周面包车16-7-2012:

maandag 16七月2012 17:00 - 23:00,KEU dinsdag 17朱莉2012 11:30 - 19:15,COU woensdag 18朱莉2012 16:30 - 23:00,KEU

在TOTAAL贲JE 20,25 UUR ingeroosterd,3个移和0 sluitdiensten。

voorjvraagverzoeken kun je von viegen bereiken via:[email protected]

Ben je verkeerd ingeroosterd en he je je wel go vrijgevraagd,will wil je me meer werken? Mail dan naar [email protected]! Ik ga dan kijken wat ik voor je kan doen。

让op! Komende让我们感受到了aantal mensen naar de的脚趾头! Achter je dienst staat dan DRI。 Het是de bedoeling dat iedereen达芬兰人的脚趾。每周在驱动器字母geroosterd中每周更换一次。 Jullie dienen op eigen vervoer te gan。在驱动器里,你可以驾驶一辆越野车。 Er worden altijd groepjes gestuurd dus spreek met elkaar af。

Groeten,

隐藏

我想分析出以下行:

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 

这样我就可以循环通过他们..

我将如何做到这一点,我想通过使用正则表达式,但我不知道如何..

斯文

+0

确定字串的'这种模式|日期|持续时间|,KEU'不会在这种情况下使用? – Leri 2012-07-09 12:32:01

+0

的格式如下,它总是相同的: 日[空格]日期[空格]月[空格]年[空格]时间[空格] - [空格]时,站 – 2012-07-09 12:34:08

+0

没错的电子邮件不改变 – 2012-07-09 12:34:19

回答

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 :)

+1

虽然这可能会回答这个问题,[这将是更可取的](http://meta.stackexchange.com/q/8259)在这里包括答案的基本部分,并提供链接供参考。 – Ghost 2012-07-09 22:23:34

1

你可能首先提取的所有令牌就像一个用一个简单的正则表达式:

$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); 

每$项目[]将在形式:

(
     [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 
    ) 

所以你将能够根据需要使用各种元素。

1
<?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: [email protected] 

    ....'; 

$data = explode("\n", $str); 
echo $data[4].'<br/>'.$data[5].'<br/>'.$data[6]; 

?> 

尝试......

+0

+1为做这项工作没有正则表达式的开销..当然它只会在$ str的格式保持不变的情况下才起作用。正如OP所说的那样。 – DavChana 2012-07-09 12:50:11

+0

我们可以使用文件处理从文件中读取数据并将其存储在一个字符串中...其余功能是相同的。 – 2012-07-09 12:54:03