为了账号安全,请及时绑定邮箱和手机立即绑定

PHP preg_match 并替换标签之间的多个实例

PHP preg_match 并替换标签之间的多个实例

PHP
牛魔王的故事 2022-07-09 16:40:45
抱歉,如果标题有点混乱,很难解释,所以会尽力而为:)好的,我有一个博客,在后端我希望能够为帖子中的每个产品添加多个画廊示例博客:Some Product Title 1blah blah blah blah[Gallery::product_id_01]Some Product Title 2blah blah blah blah[Gallery::product_id_02]所以在这个例子中,有 2 个产品,每个产品都有一个 Gallery 标签。我希望能够找到并替换这些示例标签[Gallery::product_id_01]并[Gallery::product_id_02] 使用实际的图片库,这是通过一个名为ProdImgGallery()this 的 php 函数完成的,它传递了相同的 ID 示例:product_id_01标签将始终具有[Gallery::*],但 * 指示的 :: 之后的文本会有所不同,需要从标签中捕获以用于下一阶段。使用preg_match_all("/\[Gallery::([^\]]*)\]/", $blog_content, $product_id);会按照您的预期找到所有标签,但我需要用其唯一 ID 指示的正确图库替换标签这是我所能得到的,但这只是根据我找到的所有 id 来获取每个画廊,preg_match_all我无法弄清楚如何用相应的画廊替换每个画廊//Find all Matches and put in array    preg_match_all("/\[Gallery::([^\]]*)\]/", $blog_content, $product_id);//Count all matches$all_matches = count($product_id[1]);//Loop through themfor($x=0;$x<$all_matches;$x++){echo $product_id[1][$x]."<br>";$prod_img_gallery = ProdImgGallery($product_id[1][$x]);}$blog_content = preg_replace("/\[Gallery::([^\]]*)\]/",$prod_img_gallery,$blog_content);希望这有某种意义,我无法解释事情,所以请原谅我:) 我也尝试过搜索,但找不到与我的确切问题相匹配的答案
查看完整描述

1 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以尝试使用preg_replace_callback:


$input = "Some Product Title 1

blah blah blah blah

[Gallery::product_id_01]


Some Product Title 2

blah blah blah blah

[Gallery::product_id_02]";


$out = preg_replace_callback(

    "/\[Gallery::(.*?)\]/", function($m) {

                                $val = "[Gallery::" . ProdImgGallery($m[1]) . "]";

                                return $val;

                            },

    $input);

echo $out;

这里的想法是捕获 的每次出现[Gallery::...],然后将捕获的组传递给回调函数。上面的脚本使用内联匿名函数进行回调,然后使用该ProdImgGallery()函数返回您想要的替换。


查看完整回答
反对 回复 2022-07-09
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信