使用正则表达式和PHP替换字符串中的最后一个数字(价格)?

时间:2012-03-07 09:15:05

标签: php regex preg-replace

我有一个包含几种不同价格的字符串。这是字符串:

<div class="price-box">
<p class="old-price">
    <span class="price" id="old-price-145">
        ab 64,00 € *
    </span>
</p>
<p class="special-price">
    <span class="price" id="product-price-145">
        ab 27,00 € *
    </span>
</p>

我想用其他东西替换27,00,而不是价格,而不是价格。我试过几个正则表达但到目前为止失败了。价格不同,但结构保持不变。

谢谢!

4 个答案:

答案 0 :(得分:2)

如果你真的不能使用DOM / HTML解析器而且你确定结构,你可以试试这个

(class="special-price">.*[\r\n]{1,2}.*[\r\n]{1,2}[^\d]*)[\d,]+

并替换为$1和您的新价格

here on Regexr

(                                     # Start the capturing group
class="special-price">.*[\r\n]{1,2}   # match from the "class="special-price""
.*[\r\n]{1,2}                         # match the following row
[^\d]*)                               # match anything that is not a digit and close the capt. group
[\d,]+                                # Match the price

捕获组中的部分存储在$1中,因此需要将此部分放在替换字符串中。

答案 1 :(得分:1)

现在要更改两个变量之间的文本,您可以执行以下操作:

function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}


$fullstring = "ab 64,00 € *";
$parsed = get_string_between($fullstring, "ab ", "€ *");

echo $parsed; // (result = 64,00)
$newValue = $parsed + 10; //Do Whatever you want here
echo "ab " . $newValue . " € *"; // ab 74 € *

如果您想更改资金格式。的 money_format()

请检查此http://www.php.net/manual/en/function.money-format.php

您可以更改数字格式以及您希望在页面中查看它们的方式。

答案 2 :(得分:1)

我同意关于HTML解析器的stema,但如果你真的想使用正则表达式,那该怎么样:

$str = preg_replace('/(class="special-price">.*?)\d+,\d+/s', "$1 55,00", $str);

答案 3 :(得分:0)

试试这个,

preg_replace('/ab [0-9,] € */', 'ab NEW Value € *', $string)

其中$string包含html数据。