0

可能重复:
从 HTML 文本匹配产品价格

我有一个字符串,通常但不总是 html 页面源

我想从字符串中提取定价。我知道这不是一门精确的科学,货币符号放置等的组合是无穷无尽的,但总比没有好。

示例字符串:

$string = 'the price is <tag>&#163;10.00</tag>';

所以,我从以下正则表达式开始:

$price = preg_match('#(?:\$|\£|\€|\&pound;|\&\#163;)(\d+(?:\.\d+)?)#', $string);

但是当然这只会返回第一个字符。

我的问题是,有没有办法一直遍历 $string 直到找到某个字符?例如 < 或空格?然后返回找到的内容,在这种情况下为:10.00

这是一种可行的方法还是有更好的方法?

这是上面的一个例子:

http://ideone.com/u8erb

4

2 回答 2

0

阅读文档preg_match,它不会返回您的匹配项,只有匹配项才会返回。

尝试这个

$string = 'the price is <tag>&#163;10.00</tag>';

$price = preg_match_all('#(?:\$|\£|\€|\&pound;|\&\#163;)(\d+(?:\.\d+)?)#', $string, $matches);

//This will contain your matches 
var_dump($matches);
于 2012-10-02T09:38:53.613 回答
0

preg_match_all使用with怎么样(\d+(?:\.\d+)?)(?=<\s*/\s*tag\s*>),因为货币可能会改变?任何使用正则表达式的解决方案都将取决于一组假设,所以最好先把它们搞定:

  • 您应该在哪里寻找,这些价格是否出现在给定的 div 中?
  • 什么是完整的可能值?

尝试使您的正则表达式尽可能广泛,因为将来它会失败的一个常见原因是因为您没有考虑到的一些细微的变化。如果这些价格出现在带有 id 和类的标签中,请考虑使用 XHTML 解析器:

http://php.net/manual/en/book.dom.php

http://simplehtmldom.sourceforge.net/

于 2012-10-02T10:20:36.690 回答