用上标包装字符串中的所有美分值

时间:2014-08-14 20:32:47

标签: php regex preg-replace currency

我有一个类似于" $ 2.99"或者可能是" 1.99美元 - 20.99美元"在字符串中有多个价格。

我想将美分包装在上标标签中。

到目前为止,我一直在尝试:

$price = [could be "$x.xx" or could be "$x.xx - $xx.xx"];
$pattern = '/(\$[\d,]+\.)(\d+)([\s\-]*\$[\d,]*\.*)(\d*)(.*)$/';
$formattedPrice = preg_replace($pattern, '$1<sup>$2</sup>$3<sup>$4</sup>$5', $price);

但那只匹配&#34; $ x.xx - $ xx.xx&#34;不只是&#34; $ x.xx&#34;

有没有一种方法可以找到句点的所有实例并包装下两个字符?

感谢。

2 个答案:

答案 0 :(得分:0)

如果你想包装美分,那么你可以使用:

(\$\d+\.)(\d+)

<强> Working demo

enter image description here

答案 1 :(得分:0)

试试这个:

$pattern = '/\.([\d]{2})/';

此模式将匹配一段时间后的任何两位数字。

preg_replace($pattern, '.<sup>$1</sup>', '$2.99');
preg_replace($pattern, '.<sup>$1</sup>', '$1.99 - $20.00');

输出:

string(16) "$2.<sup>99</sup>"
string(36) "$1.<sup>99</sup> - $20.<sup>00</sup>"

如果您想要防止在一段时间后选择任意随机的两位数字,但特别是以一美元金额,您可以添加它以确保您使用此模式正确定位正确的子串:

$pattern = '/\$\d\.([\d]{2})/';