我想在字符串中找到任何美元金额,并用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>.