当另一个单词匹配时,正则表达式提取一个或多个数字

时间:2014-03-12 18:36:53

标签: regex

我用这个撕开我的头发 - 它不是这么复杂,但是在互联网上环顾四周并找不到答案..

我有一个字符串,可以是以下任何一种:

  • £300 - 每天325英镑
  • £300pd
  • £300 - £350pd
  • £300 - 每天325英镑
  • £300.00-£325.00每天

我想从字符串中提取金额,但只有在字符串中出现“day”或“pd”时才会提取。

到目前为止我所拥有的是......

preg_match_all('/([0-9.]+).*(day|pd)/i', $string, $matches)

..但似乎没有拿出第二笔金额。我可以把它缩小到......

preg_match_all('/([0-9.]+)/', $string, $matches)

..但是它会匹配那些不包含“day”或“pd”的那些。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可以使用lookahead:

if ( preg_match_all('/[0-9.]+(?=.*?(?:day|pd))/i', '£300.00-£325.00 per day', $matches) )
   print_r($matches[0]);

输出

Array
(
    [0] => 300.00
    [1] => 325.00
)

答案 1 :(得分:0)

试试这个:

preg_match_all('/(?=£([0-9.]+).*(?:day|pd))/i', $string, $matches);