如何替换此字符串中的斜杠?

How can I replace the slash in this string?

我有一个像这样的字符串: images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg

我想在 images/

之后将 / 替换为 -

结果可能是这样的:

images/Qcuj-lXOSWNDwF-FmSgCbQ==.jpg

这看起来很简单,但我没有头绪,谢谢帮助!


字符串可能在html文件中,可能像:

<td><img src="images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg" ></td>

这个如何正确匹配替换?

谢谢大家!!我会暂时理解答案!

顺便说一下,我使用 php。

您可以使用:

$s = 'images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg';
echo preg_replace('~(images/)(*SKIP)(*F)|([^/]*)/~', '-', $s);
images/Qcuj-lXOSWNDwF-FmSgCbQ==.jpg

RegEx Demo

解释:

  • (*FAIL) 表现得像一个失败的否定断言,是 (?!)
  • 的同义词
  • (*SKIP) 定义了一个点,当子模式稍后失败时,正则表达式引擎不允许回溯超过该点
  • (*SKIP)(*FAIL) 一起提供了一个很好的限制替代方案,你不能在上面的正则表达式中有可变长度的后视。
  • 在这个正则表达式中,我们匹配 image/ 并跳过+完全失败这个匹配。在输入的其余部分,我们匹配 / 并替换为 -

更新: 对于更新的正则表达式,您可以使用:

$s = '<td><img src="images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg" ></td>';
echo preg_replace('~(images/|</)(*SKIP)(*F)|([^/<"]*)/~', '-', $s);
<td><img src="images/Qcuj-lXOSWNDwF-FmSgCbQ==.jpg" ></td>

但是我必须警告使用正则表达式修改 HTML 源代码。最好使用 DOM 提取图像的 src 部分,然后应用此正则表达式。

list($path, $rest) = explode(PATH_SEPARATOR, $s, 2);
echo $path . PATH_SEPARATOR . implode('-', explode(PATH_SEPARATOR, $rest));
//⇒ images/Qcuj-lXOSWNDwF-FmSgCbQ==.jpg

这里我们将字符串拆分为路径其余,将其余[=16=中的斜杠进行转换] 并用斜线将碎片粘回去。能不能避免使用正则表达式,就避免吧。

使用\G锚点进行连续模式匹配。

锚点\G匹配到上一个匹配结束的位置。

(?:images/|(?<!^)\G)[^\n/]*\K/

使用上面的正则表达式,然后将匹配的 / 替换为 -

DEMO

$str = "images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg";
echo preg_replace('~(?:images/|(?<!^)\G)[^\n/]*\K/~', '-', $str);

输出:

images/Qcuj-lXOSWNDwF-FmSgCbQ==.jpg

不要一边捏着鼻子一边跳来跳去使其与正则表达式一起工作,只需先拆分字符串并仅在第二部分应用替换:

$s = 'images/Qcuj/lXOSWNDwF/FmSgCbQ==.jpg';
list($prefix, $suffix) = explode('/', $s, 2);

$t = $prefix . '/' . strtr($suffix, '/', '-');