替换/正则表达式:将span标记放在后跟%的数字处

时间:2014-07-04 18:24:20

标签: php regex preg-replace

我正试图在span标签中覆盖字符串中的所有数字(后跟%符号的数字)

以下是一些正则表达式的noob尝试解决它:

$str = preg_replace("/(1-9+)%/", "<span>$1</span>", $str);

$str = preg_replace("/([1-9]+)%/", "<span>$1</span>", $str);

什么都没有被替换

我打赌我错了..我需要更多地学习正则表达式,我知道

但你可以帮我进一步解决这个问题吗?

2 个答案:

答案 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是第三个错误(我认为)