我正试图在span标签中覆盖字符串中的所有数字(后跟%符号的数字)
以下是一些正则表达式的noob尝试解决它:
$str = preg_replace("/(1-9+)%/", "<span>$1</span>", $str);
或
$str = preg_replace("/([1-9]+)%/", "<span>$1</span>", $str);
什么都没有被替换
我打赌我错了..我需要更多地学习正则表达式,我知道
但你可以帮我进一步解决这个问题吗?
答案 0 :(得分:1)
你的正则表达式几乎是正确的,但有一个关键的故障。您正在匹配[1-9]
而不是[0-9]
。
编辑:使用preg_replace_callback
生成随机数:
以下应该工作:
echo preg_replace_callback('/([0-9]+)%/', function ($m) {
return '<span>' . rand($m[1]-5, $m[1]+5) . '%</span>'; }, 'hello 100% hello');
答案 1 :(得分:0)
在尝试了一些之后,这有效:
$str = preg_replace('/[0-9]{1,3}%/', '<span>$0</span>', $str);
使用()是第一个错误。使用1-9而不是0-9是另一个错误。使用$ 1而不是$ 0是第三个错误(我认为)