我想从亚马逊获得一些数据,我正在使用preg_match来查找我需要的元素。但是,我遇到了问题。正则表达式“|”问题
我将两条语句组合在一起,所以如果找不到其中一条,我相信,除非产品没有列入其中,否则这些事情将永远存在。
那么它在做什么是寻找运输成本。如果没有找到“免运费”文本。
preg_match_all('/(& <b>(.*?)<|<span class="olpShippingPrice">(.*?)<)/',$results,$match1);
如果我运行此我得到我想要的数据,但它抓住了一些HTML,如果我跑这两个不同的preg_matches这不会是抓住。我无法弄清楚如何展示它,但是它在第一个'免费送货'和下面的所有文字都是粗体的,抓住了大胆的标签。你也可以看到胡萝卜。
[1]=>
array(10) {
[0]=>
string(38) "$30.00<"
[1]=>
string(37) "$6.99<"
[2]=>
string(37) "$6.99<"
[3]=>
string(38) "$53.99<"
[4]=>
string(37) "$5.25<"
[5]=>
string(19) "& FREE Shipping<"
[6]=>
string(19) "& FREE Shipping<"
[7]=>
string(19) "& FREE Shipping<"
[8]=>
string(19) "& FREE Shipping<"
[9]=>
string(38) "$70.39<"
}
所以我的问题:我应该做些什么来删除这个,所以我留下了干净的数据标签和胡萝卜?此外,在两个独立的preg_match中运行这些对我来说不起作用。
从匹配中删除'<' – 2014-10-31 15:05:11
这是如何重复的?对我来说似乎很独特。 – 2014-10-31 15:06:43
@ smack-a-bro因为用正则表达式解析HTML是不好的,所链接问题的答案是值得注意的警告。 ***特别是当你不控制源HTML时。 – 2014-10-31 15:08:03