我有一个内容,就像
Test test test <img src="abc.png" alt='1'> test test <img src="123.png" alt='2'> test test
我想将其更改为
Test test test <id>1</id> test test <id>2</id> test test
我试过了:
preg_match_all('/<img(.*?)alt=\"(.*?)\"(.*?)>/si', $content, $result, PREG_SET_ORDER);
foreach($result as $val) {
$content = preg_replace('/<img(.*?)alt=\"(.*?)\"(.*?)>/si', '<id>'.$val[2].'</id>', $content);
但它给了我:
Test test test <id>2</id> test test <id>2</id> test test
答案 0 :(得分:1)
似乎preg_match *在这里使用是正确的功能,需要循环来证明。它只需要一个preg_replace():
即可完成 preg_replace("/<.*? alt=[\"']([0-9]+)[\"'] *>/", '<id>${1}</id>', $teststr);
这将独立地对每个匹配的表达式进行操作,并一次性完成所有这些操作。如果您确定需要src
值,则可以根据需要调整表达式。
答案 1 :(得分:0)
试试这个。
$data = `Test test test <img src="abc.png" alt='1'> test test <img src="123.png" alt='2'> test test`;
$replace = ["<img src='abc.png' alt='1'>","<img src='123.png' alt='2'>"];
$value = ["<id>1</id>","<id>2</id>"];
$dataNeeded = str_replace($replace, $value, $emailContent);
echo $dataNeeded;
答案 2 :(得分:0)
你在foreach中的替换包含问题。这是固定版本。
<?php
$str = <<<term
Test test test <img src="abc.png" alt='1'> test test <img src="123.png" alt='2'> test test'
term;
preg_match_all('/<img.*?alt=[\'"](\d+)[\'"]>/', $str, $matches, PREG_SET_ORDER, 0);
foreach($matches as $val) {
$str = preg_replace('/<img.*?alt=[\'"](' . $val[1] . ')[\'"]>/', '<id>'.$val[1].'</id>', $str);
}
var_dump($str);
在这里查看: http://sandbox.onlinephpfunctions.com/code/ad70f171ec5387451a29166865474de0f223f7c1