替换/regex:将span标签放在后面跟着%的数字周围


Replace/regex: Put span tags around numbers that are followed by %

我试图在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是第三个错误(我认为)