0

我有两个字符串

<span class="price" id="product-price-2095">$425.00</span>
<span class="price" id="product-price-355">$25.00</span>

我需要从这些字符串中提取价格 $425.00 和 $25.00

我一直在用这个

preg_match('/(?<=<span class="price" id="product-price-[0-9]{3}">)(.+?)(?=<\/span>)/s', $product, $priceArray);

我遇到的问题是 [0-9]{3} 部分。它仅适用于 25.00 价格,但如果我将 3 更改为 4,它将仅适用于 425.00 价格我试过 [0-9]{3,4} 但我收到以下错误

警告:preg_match() [function.preg-match]:编译失败:后向断言在偏移量 56 处不是固定长度

无论“product-price-###”此处的数字如何,我该怎么做才能使其匹配?

4

1 回答 1

0

环视有它们的位置,但不幸的是不能改变。这是一种没有环顾四周的方法。我正在使用分组进行捕获,因此您可以从提供的数组中进行选择preg_match_all()

<?php

$string = '<span class="price" id="product-price-2095">$425.00</span>
<span class="price" id="product-price-355">$25.00</span>';

$pattern = '!(<span\sclass\="price"\sid\="product-price-\d{3,4}">)([^<]+)(</span>)!i';
$m = preg_match_all($pattern,$string,$matches);

print_r($matches)

?>

输出

Array
(
    [0] => Array
        (
            [0] => <span class="price" id="product-price-2095">$425.00</span>
            [1] => <span class="price" id="product-price-355">$25.00</span>
        )

    [1] => Array
        (
            [0] => <span class="price" id="product-price-2095">
            [1] => <span class="price" id="product-price-355">
        )

    [2] => Array
        (
            [0] => $425.00
            [1] => $25.00
        )

    [3] => Array
        (
            [0] => </span>
            [1] => </span>
        )

)
于 2013-08-07T03:26:08.467 回答