我有两个字符串
<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]:编译失败:lookbehind断言在偏移量56处不是固定长度
我可以做些什么来使它匹配,无论数字在哪里“product-price - ###”?
答案 0 :(得分:0)
Lookarounds有它们的位置,但不幸的是不能变化。这是一种没有环顾四周的方法。我正在使用分组捕获,因此您可以从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>
)
)