删除字符串之间的字符串并替换为文本加计数器
Delete string between strings and replace with text plus counter
我想从字符串中删除所有 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
标志并将 .*
替换为 .*?
以使正则表达式更加透明
我想从字符串中删除所有 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
标志并将.*
替换为.*?
以使正则表达式更加透明