如何替换链接中的文本组

时间:2014-06-27 19:12:15

标签: php regex replace inline src

我有一个正则表达式,可以检测到某种类型的链接。检测部分可以正常工作,它可以替代工作。我尝试替换http://regex101.com/

代码:

$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
}

我需要用_post_notif_替换src中的_thumb_。我该怎么办?

解决thnx到@OnlineCop

2 个答案:

答案 0 :(得分:1)

在下面的正则表达式中,将第二个捕获的组替换为_thumb_

^(cover_photos_s\/[a-z0-9A-Z]+)(_\w+?_\w+?_)(.*)$

DEMO

您的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

IDEONE

<强>解释

  • (cover_photos_s\/[a-z0-9A-Z]+)捕获字母_之前的post
  • (_\w+?_\w+?_)从下划线开始,它匹配最短字符到第一个下划线,因此它匹配字符串_post。同样,它匹配字符串notif,因为在?符号后+运算符使正则表达式引擎匹配最短可能性加上以下_符号。因此反过来,正则表达式引擎捕获第二组字符。
  • 他们旁边的所有字符都会被捕获到第三组。
  • 在替换部分中,用字符串替换第二组将提供所需的输出。

答案 1 :(得分:0)

如果它是文字:使用str_replace

如果_post_notif_是文字,您可以使用:

$replaced = str_replace("_post_notif_","",$link);

如果它是变量:使用\K

如果_post_notif_实际上是一个总是有3个下划线的变量,例如_post_notif_,那么你可以使用这个正则表达式进行直接替换:

[^/]+/[^_]+\K_(?:[^_]+_){2}

在PHP中:

$ replacement = preg_replace(&#39;〜[^ /] + / [^ ] + \ K (?:[^ ] + ){2} 〜&#39;,&#39;&#39;,$ link);

<强>解释

  • [^/]+匹配任何不是`/&#39;
  • 的字符
  • //
  • 相匹配
  • [^_]+匹配任何不是`_&#39;
  • 的字符
  • \K告诉引擎放弃与最终匹配的内容
  • _与第一个_
  • 相匹配
  • (?:[^_]+_){2}匹配其余变量(无下划线+ 1下划线,两次)