【问题标题】:How to properly parse string using preg_match_all如何使用 preg_match_all 正确解析字符串
【发布时间】:2015-06-01 22:21:36
【问题描述】:

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

     2002 Volkswagen Eurovan Clean title - $2000

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

所以我的问题是,我怎样才能使用 preg_match_all 正确地抓住所有的可能性,然后我可以分解它们来获得第一条数据(年份)和最后一条数据(价格)?我是否会采用这种方法来查看是否可以根据数字进行匹配,因为假定格式通常是相同的?

【问题讨论】:

  • 你能提供你的尝试吗?
  • /^([0-9]{4})|(\$[0-9]+)$/ 这将匹配以 4 位数字开头的字符串,或以数字结尾的美元符号。
  • 我目前的尝试是这样的:'/^(\d+)/i'
  • castis - 似乎不起作用。输出为空。

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


【解决方案1】:

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

^(?'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
)

【讨论】:

  • 有趣的是,当我使用你的 $str 时,它可以工作,但当我使用我的时,它就不行了。
  • 你的呢?你能分享(最好通过 ideone.com)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-14
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 2017-06-22
相关资源
最近更新 更多