Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何替换链接中的一组文本_Php_Regex_Replace_Inline_Src - Fatal编程技术网

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
  • (?:[^]+){2}
    匹配其余变量(无下划线+1下划线,两次)

在下面的正则表达式中,将第二个捕获的组替换为
\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代码和解释替换变量的选项。:)