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

Find multiple amounts in string and wrap with <span>

我想在字符串中找到任何金额并用 span 标签将其包装起来。 例如我想编辑这个字符串:
Save when you spend 0.
进入这个:
Save <span></span> when you spend <span>0.</span>

这是我目前得到的:

$the_text = "Save  when you spend 0.";
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></span> when you spend <span></span>0.

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

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

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

并替换为<span>[=13=]</span>。看一个在线的 demo

  • $\d+ - 美元符号和 1+ 位数字。
  • (?:,\d+)? - 可选的非捕获组以匹配逗号和 1+ 位数字。
  • \b - 单词边界。

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

Prints:

Save <span></span> when you spend <span>0</span>.