PHP用HTML包装字符串的最后两个字母

PHP用HTML包装字符串的最后两个字母,php,preg-replace,Php,Preg Replace,我在尝试替换几个字符串时遇到问题。基本上,我的页面上有一堆价格 人民币148.00元 我想做的是只对最后2个数字进行替换,这样我就可以像这样做了 人民币14800元 Preg replace适用于RMB部件,因为它始终存在 我的问题是最后两个数字可以是任何东西,这一切都取决于价格,所以我不能只是删除和替换,我只需要在它们周围包装HTML标记 $string = $product['price']; $string = preg_replace('/[\x00-\x1F\x80-\xFF]/',

我在尝试替换几个字符串时遇到问题。基本上,我的页面上有一堆价格

人民币148.00元

我想做的是只对最后2个数字进行替换,这样我就可以像这样做了

人民币14800元

Preg replace适用于RMB部件,因为它始终存在

我的问题是最后两个数字可以是任何东西,这一切都取决于价格,所以我不能只是删除和替换,我只需要在它们周围包装HTML标记

$string = $product['price'];
$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);
echo preg_replace('/RMB/', '<sup class="currency-sym">RMB</sup>', $string, 1);

假设最后两个字符是数字,您可以

$string=preg_replace('/(\d\d)$/', '<sup class="currency-sym">\1</sup>', $string);
如果没有,

$string=preg_replace('/(..)$/', '<sup class="currency-sym">\1</sup>', $string);
我们应该做到这一点

交替使用

$string=substr($string,0,-2).'<sup class="currency-sym">'.substr($string,-2).'</sup>';

假设最后两个字符是数字,您可以

$string=preg_replace('/(\d\d)$/', '<sup class="currency-sym">\1</sup>', $string);
如果没有,

$string=preg_replace('/(..)$/', '<sup class="currency-sym">\1</sup>', $string);
我们应该做到这一点

交替使用

$string=substr($string,0,-2).'<sup class="currency-sym">'.substr($string,-2).'</sup>';

下面是一个正则表达式解决方案,它在字符串末尾查找最后的数字表示法

$string = 'RMB148.00';
$string = preg_replace('/(\d+)\.(\d{2})\z/','$1<sup>$2</sup>',$string);
echo $string;

下面是一个正则表达式解决方案,它在字符串末尾查找最后的数字表示法

$string = 'RMB148.00';
$string = preg_replace('/(\d+)\.(\d{2})\z/','$1<sup>$2</sup>',$string);
echo $string;
密码

解释 substr$s,$i,$l获取$s的$l符号,从$i开始索引从零开始

所以,第一个substr$string,0,strlen$string-2获取除最后两个符号之外的所有字符串

第二个substr$string,strlen$string-2,2只获取最后两个符号

代码。

解释 substr$s,$i,$l获取$s的$l符号,从$i开始索引从零开始

所以,第一个substr$string,0,strlen$string-2获取除最后两个符号之外的所有字符串

第二个substr$string,strlen$string-2,2只获取最后两个符号


您可以在explode函数中使用以下命令

$string = explode ('.', $product['price']);

$new_string = $string[0].'<sup>'. $string [1]. '</sup>';

并用同样的方法对人民币进行正则表达式处理。

您可以使用下面的explode函数

$string = explode ('.', $product['price']);

$new_string = $string[0].'<sup>'. $string [1]. '</sup>';

用同样的方法为人民币做正则表达式。

你应该使用模式匹配正则表达式。请注意,替换参数中的$1与模式参数中的\d{2}匹配。preg_replace仅替换匹配的图案。这种模式是匹配的。后跟任意两位数字。自从未包含在替换参数中。它不会显示在$string中

当然,您可以使用一个preg_replace来执行您想要的操作:

$string = preg_replace('/^(RMB)(\d+)(\.(\d{2}))?$/', "<sup class='currency-sym'>$1</sup>$2<sup>$4</sup>", $string);

如果您想要DOM完整性,第二个示例可能是一个好主意,否则它会在没有十进制数时创建一个空值。

您应该使用模式匹配正则表达式。请注意,替换参数中的$1与模式参数中的\d{2}匹配。preg_replace仅替换匹配的图案。这种模式是匹配的。后跟任意两位数字。自从未包含在替换参数中。它不会显示在$string中

当然,您可以使用一个preg_replace来执行您想要的操作:

$string = preg_replace('/^(RMB)(\d+)(\.(\d{2}))?$/', "<sup class='currency-sym'>$1</sup>$2<sup>$4</sup>", $string);

如果您想要DOM完整性,第二个示例可能是一个好主意,否则它会在没有小数点时创建一个空值。

@NooBskie,如果您需要解释,请按照我的说明进行answer@NooBskie,如果你需要解释,请听我的回答