php preg_match正则表达式特殊模式

时间:2014-01-16 11:10:24

标签: php regex preg-match

我需要使用preg_match来获取字符串的某些部分并在以后使用它们。 我并不擅长使用正则表达式,所以我希望你能帮助我。

我当前的正则表达式:

$regex = '/(?P<name>\w+): (?P<agency>\w+)/';

到目前为止我的代码:

$mail = imap_qprint(imap_body($mbox, $msgno)); 

$regex = '/(?P<name>\w+): (?P<agency>\w+)/';

preg_match($regex, $mail, $agency);
print_r($agency);

为了保持简单,$ mail看起来像这样(例如):

Agency : Aname
Firstname : Fname
Lastname: Lname
Number of participant : 1

我希望在$ agency中获得一个数组,可以给我代理商,名字和姓氏,以及另一个正则表达式(因为我不知道是否有可能只有一个)得到的数量参与者。

提前致谢

2 个答案:

答案 0 :(得分:0)

使用preg_match_all和(?P<name>.+)[:](?P<value>.+),您将得到:

$matches Array:
(
    [name] => Array
        (
            [0] => Agency 
            [1] => Firstname 
            [2] => Lastname
            [3] => Number of participant 
        )

    [value] => Array
        (
            [0] =>  Aname
            [1] =>  Fname
            [2] =>  Lname
            [3] =>  1

您可以将其视为

$data = array();
foreach($matches['name'] as $id => $name) {
    $data[$name] = trim($matches['value'][$id]);
}

哪个会给你一个键=&gt;值包含所有信息的$ data。

编辑:为了使它更强大,我建议使用多行标志并将^和$添加到你的正则表达式

preg_match_all('#^(?P<name>.+)[:](?P<value>.+)$#m',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);

答案 1 :(得分:0)

怎么样: $regex = '/Agency\s*:\s*(\w+).*?Firstname\s*:\s*(\w+).*?Lastname:\s*(\w+).*?Number of participant\s*:\s*(\d+)/s'