如何使用preg_match_all正确解析字符串

时间:2015-06-01 22:21:37

标签: php regex preg-match preg-match-all

我有一些警报设置,会定期通过电子邮件发送给我,在这些电子邮件中我会看到如下内容:

     2002 Volkswagen Eurovan Clean title - $2000

这是一般的一致格式。这些也是可点击的链接。 我已经设置了一个脚本,它将正确地从正文字符串中提取链接,但我正在寻找的基本上是年份和来自这些标题的价格。有可能在列表中列出多个电子邮件。

所以我的问题是,如何使用preg_match_all来正确获取所有可能性,以便我可以将它们分解以获取第一个数据(年份)和最后一个数据(价格)?我是否会采用这种方法来确定我是否可以根据数字进行匹配,因为它假定格式通常是相同的?

1 个答案:

答案 0 :(得分:0)

您可以尝试匹配以1920开头的4位数字,并将这些数字命名为,以及$之后的数字价格,如果这些值始终位于字符串的开头和结尾,则使用锚点^$

^(?'year'\b(?:19|20)\d{2}\b)|(?'price'\$\d+)$

请参阅demo

示例IDEONE code

$re = "/^(?'year'\\b(?:19|20)\\d{2}\\b)|(?'price'\\$\\d+)$/"; 
$str = "2002 Volkswagen Eurovan Clean title - \$2100"; 
preg_match_all($re, $str, $matches);
print_r(array_filter($matches["year"]));
print_r(array_filter($matches["price"]));

输出:

Array
(
    [0] => 2002
)
Array
(
    [1] => $2100
)