在字符串中查找多个金额并用<span>



我想在字符串中找到任何美元金额,并用span标记将其包装起来。例如,我想编辑这个字符串:
Save $15 when you spend $150.
变成:
Save <span>$15</span> when you spend <span>$150.</span>

这是我目前得到的:

$the_text = "Save $15 when you spend $150.";
if (preg_match('/(?<=$)d+(,d+)?b/', $the_text, $regs)) {
foreach ($regs as $amount) {
$offer_text = str_replace("$","<span>$",$offer_text);
$offer_text = str_replace($amount,$amount."</span> ",$offer_text);
}
}

只要字符串中只有一个美元金额,或者字符串包含多个不同整数的美元金额,这就适用于我。但在这种特殊情况下,代码输出如下:
Save <span>$15</span> when you spend <span>$15</span>0.

关于如何改进代码以捕获所有情况的任何想法?

我不是php专家,但当我摆弄它时,我只是使用:

$d+(?:,d+)?b

,用<span>$0</span>代替。查看在线演示

  • $d+-一个文字美元符号和1+数字。
  • (?:,d+)?-可选的非捕获组,匹配逗号和1+数字。
  • b- A word- border .

<?php
$the_text = "Save $15 when you spend $150.";
echo preg_replace('/$d+(?:,d+)?b/', '<span>$0</span>', $the_text);
?>

打印:

Save <span>$15</span> when you spend <span>$150</span>.

最新更新