php - 删除字符串之间的字符串并替换为文本加计数器

标签 php preg-replace strpos

我想从字符串中删除所有 Base64 图像

<img src="data:image/png;base64,iVBORw0..="><img src="data:image/png;base64,iVBORw1..=">...

并将它们替换为 image1、image2 等。

<img src=" image1"><img src=" image2">...

因此,我删除了字符串的 base64 部分,并将其替换为“image”,后跟出现计数器,但它不起作用,所以我一直得到 image1。

我能做什么? 谢谢!!

这是我到目前为止的代码:

    $replacement = "image";
    $stringResult= deleteBase64_andReplace("data:", "=", $replacement, $string);
    echo $stringResult;



function deleteBase64_andReplace($start, $end, $replacement, $string) {
    $count = 0;

    $pattern = '|' . preg_quote($start) . '(.*)' . preg_quote($end) . '|U'; 
 
    while (strpos($string, $start) !== false) { 
    return preg_replace($pattern, $replacement.++$count, $string); 

    }
    
}

最佳答案

您需要替换 deleteBase64_andReplace函数与

function deleteBase64_andReplace($start, $end, $replacement, $string) {
    $count = 0;
    $pattern = '|' . preg_quote($start, '|') . '(.*?)' . preg_quote($end, '|') . '|s'; 
    while (strpos($string, $start) !== false) { 
        return preg_replace_callback($pattern, function($m) use ($replacement, &$count) {
            return $replacement . ++$count;}, $string); 
    }
}

请参阅PHP demo 。输出为<img src="image1"><img src="image2"> .

注释:

  • preg_replace替换为 preg_replace_callback能够对 $count 进行更改替换后续匹配时
  • preg_quote($start, '|') . '(.*?)' . preg_quote($end, '|')现在转义正则表达式分隔符字符,您选择了 |它也需要转义
  • 我建议省略 U标记并替换 .*.*?使正则表达式更加透明

关于php - 删除字符串之间的字符串并替换为文本加计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72257974/

相关文章:

t.me 链接的 php 正则表达式

C 版本的 strpos 和 substr?

php - 两个表之间的内部连接显示错误

具有数组返回类型的 PHP 函数

php - 使用相同的表单/请求值重定向 (POST)

php - 使用 PHP 和 javaScript 的登录解决方案的密码散列

php - preg_replace : how to?

php - 如何检查字符串在 4 个连续字符后是否没有元音

PHP 在 HTML 中查找字符串

php - 标记段落中的短语