正则表达式不是我的强项,我可能会过于复杂,但我已经设法出现了满足我需求的模式。
\[img.*\].*photobucket.*(.jpg)\[\/img.*\]
这是一个演示:
https://regex101.com/r/fo98tP/6
我想用“.jpg~prinal”替换组匹配(即“.jpg”)。
我已经弄清楚如何使用preg_match_all获取匹配但我不知道如何进行替换并将其注入原始文本块。
为了给出一些背景知识,这是尝试解决新的热链接策略,目的是让我的PHP脚本浏览我的phpBB论坛上的所有消息并进行上面的搜索和替换,然后更新帖子,如果有的话匹配/替换。如果它可以直接在MySQL中完成,但我还是想在我跑步之前走路!
非常感谢任何帮助;我的头疼了!
答案 0 :(得分:1)
我认为您正在寻找preg_replace($pattern, $replacement, $text)
。
所以假设你的正则表达式是正确的,它似乎正在起作用。 (就个人而言,我会做一些小修改,比如将\[img.*\]
更改为\[img[^]]*\]
,但这可能只是一种风格的事情。您需要做的就是再添加两个捕获组。
(\[img.*\].*photobucket.*)(.jpg)(\[\/img.*\])
这允许您在替换中使用引用这些捕获组。
$replace = "$1$2~original$3";
非常简单 - 您只需重写原始文本的匹配部分,以包含"〜原创"你想要的。
整个代码块可能如下所示:
$text = "Steering damper mounts finished - without the connecting rod the damper would get bent:
[url=http://s557.photobucket.com/user/realboss7669/media
/C85A0F5D-413D-4779-9F09-
BD43BB798238_zpse8s6dxyu.jpg.html:jaeyh8wg]
[img:jaeyh8wg]http://i557.photobucket.com/albums
/ss16/realboss7669/C85A0F5D-413D-4779-9F09
BD43BB798238_zpse8s6dxyu.jpg[/img:jaeyh8wg][/url:jaeyh8wg]";
$pattern = "/(\[img.*\].*photobucket.*)(.jpg)(\[\/img.*\])/i";
$replace = "$1$2~original$3";
$text = preg_replace($pattern, $replace, $text);
答案 1 :(得分:1)
是的,你可以做全局替换,只需使用适当的捕获组。
.jpg[/img:jaeyh8wg]
\ ^
由于您要在此处插入,因此您只需要两个组即可将其拆分。
此外,由于您正在寻找最接近的封口,因此最好使用
非贪心量词.*?
。
https://regex101.com/r/fo98tP/10
所以它是一个
查找(\[img.*?\].*?photobucket.*?.jpg)(\[\/img.*?\])
替换$1~original$2