我试图在span标签
中包围字符串中的所有数字(后面跟着%符号的数字)下面是一些正则表达式新手尝试解决的问题:
$str = preg_replace("/(1-9+)%/", "<span>$1</span>", $str);
或
$str = preg_replace("/([1-9]+)%/", "<span>$1</span>", $str);
没有东西被替换
我敢说我全搞错了。我需要学习更多的正则表达式,我知道但是你能进一步帮助我吗?
你的正则表达式几乎是正确的,但有一个关键的小故障。您正在匹配[1-9]
而不是[0-9]
。
EDIT:使用preg_replace_callback
生成随机数:
以下内容应该可以使用:
echo preg_replace_callback('/([0-9]+)%/', function ($m) {
return '<span>' . rand($m[1]-5, $m[1]+5) . '%</span>'; }, 'hello 100% hello');
在尝试了一些之后,这个成功了:
$str = preg_replace('/[0-9]{1,3}%/', '<span>$0</span>', $str);
使用()是第一个错误。用1-9代替0-9是另一个错误。用$1代替$0是第三个错误(我认为)