Php 如何替换链接中的一组文本
我有一个正则表达式可以检测某种类型的链接。检测部分工作正常,而替换部分不工作。我试着在 守则:Php 如何替换链接中的一组文本,php,regex,replace,inline,src,Php,Regex,Replace,Inline,Src,我有一个正则表达式可以检测某种类型的链接。检测部分工作正常,而替换部分不工作。我试着在 守则: $link="cover_photos_s/yasinallana1984751717_post_notif_aurora_kuenzli_big.jpg"; //regex $reg_for_key="~((cover_photos_s\/)([a-zA-Z0-9]+)(_post_notif_)(\w+)(.[a-z]+))~i"; if(preg_match_all($reg_for_key
$link="cover_photos_s/yasinallana1984751717_post_notif_aurora_kuenzli_big.jpg";
//regex
$reg_for_key="~((cover_photos_s\/)([a-zA-Z0-9]+)(_post_notif_)(\w+)(.[a-z]+))~i";
if(preg_match_all($reg_for_key,$link))
{
//the replace string goes here
}
我需要将src中的\u post\u notif.
替换为\u thumb.
。我该如何做
如果是文字,则将thnx解析为@OnlineCop:使用
str\u替换
如果\u post\u not如果
是文字,则可以使用:
$replaced = str_replace("_post_notif_","",$link);
如果是变量:使用\K
如果\u post\u notif
实际上是一个始终有3个下划线的变量,如\u post\u notif
,则可以使用此正则表达式直接替换:
[^/]+/[^_]+\K_(?:[^_]+_){2}
在PHP中:
$replaced=preg_replace('~[^/]+/[^]+\K(?[^]+){2}',''.$link)
解释
匹配任何不是“/”字符的字符[^/]+
与/
/
匹配任何不是``的字符[^]+
告诉引擎放弃到目前为止与最终匹配的内容\K
匹配第一个\uu
\u
匹配其余变量(无下划线+1下划线,两次)(?:[^]+){2}
\u thumb\u
^(cover_photos_s\/[a-z0-9A-Z]+)(_\w+?_\w+?_)(.*)$
你的php代码是
<?php
$link = "cover_photos_s/yasinallana1984751717_post_notif_aurora_kuenzli_big.jpg";
$reg_for_key = "~^(cover_photos_s\/[a-z0-9A-Z]+)(_\w+?_\w+?_)(.*)$~";
$replacement = "$1_thumb_$3";
echo preg_replace($reg_for_key, $replacement, $link);
?> //=> cover_photos_s/yasinallana1984751717_thumb_aurora_kuenzli_big.jpg
/=>封面照片/yasinalana1984751717\u thumb\u aurora\u kuenzli\u big.jpg
说明:
捕捉到字符串(封面照片\u s\/[a-z0-9A-Z]+)
之前出现的
从下划线开始,它匹配最短的单词字符直到第一个下划线,因此它匹配字符串(\uw+?\uw+?)
。它再次匹配字符串\u post
,因为notif
运算符在?
符号之后使正则表达式引擎匹配最短可能性加上以下+
符号。因此,正则表达式引擎反过来捕获第二组字符\uu
- 旁边的所有角色都被捕获到第三组中
- 在替换部分,用字符串替换第二组将得到所需的输出
\2\3\u thumb\u5\6
是否无效?为什么不试试(\u post\u notif)
,然后用preg\u replace()
替换匹配项@在线警察把这个作为答案,这样我就可以投票支持你了。它起作用了,因为我添加了用PHP代码和解释替换变量的选项。:)