我在尝试替换几个字符串时遇到了一个问题。本质上,我的页面上有一堆价格,看起来像
人民币148.00
我想做的是只对最后2个数字进行替换,这样我就可以做一些类似的事情
人民币14800
Preg替换对人民币部分很好,因为它总是在那里。
我的问题是,最后两个数字可以是任何东西,这完全取决于价格,所以我不能只是删除和替换,我只需要将HTML <sup>
标签包装在它们周围。
$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>';
这里有一个regex解决方案,用于查找字符串末尾的最后一个数字表示法。
$string = 'RMB148.00';
$string = preg_replace('/('d+)'.('d{2})'z/','$1<sup>$2</sup>',$string);
echo $string;
您可以将以下内容与blade()函数一起使用
$string = explode ('.', $product['price']);
$new_string = $string[0].'<sup>'. $string [1]. '</sup>';
用同样的方法计算人民币的正则表达式。
代码
<?php
$string = '14842.00';
$string = substr($string, 0, strlen($string) - 2) . '<sup>' . substr($string, strlen($string) - 2, 2) . '</sup>';
echo $string;
尝试在线沙盒。
解释
substr($s, $i, $l)
得到$s
的$l
符号,从$i
索引开始(索引从零开始)。
所以第一个substr($string, 0, strlen($string) - 2)
得到除了最后两个符号之外的所有字符串。
第二个substr($string, strlen($string) - 2, 2)
只得到最后两个符号。
有关substr的详细信息。
您应该使用模式匹配的正则表达式。请注意,替换参数中的$1
与模式参数中的('d{2})
匹配。CCD_ 10仅替换匹配的图案。此模式匹配后面跟有任意两位数字的.
。由于.
不包含在替换参数中,因此它不会显示在$string
中。
$string = preg_replace('/'.('d{2})$/', '<sup>$1</sup>', $string);
当然,你可以使用一个preg_replace来做你想做的事情:
$string = preg_replace('/^(RMB)('d+)('.('d{2}))?$/', "<sup class='currency-sym'>$1</sup>$2<sup>$4</sup>", $string);
如果您想要DOM完整性,第二个例子可能是个好主意,否则当没有小数时,它会创建一个空的<sup></sup>
。