首页 > 解决方案 > 更改 preg_replace 网址

问题描述

对不起我的英文打字不好。

我要添加标签<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">

到错误的网址


我想(preg_replace)找到

<link rel="canonical" href="/example1/example2/example3/example4" />

并更换

<link rel="canonical" href="example1/example2/example3/example4" /><meta name="ROBOTS" content="NOINDEX, NOFOLLOW">

这是我的代码:

$body = preg_replace('# <link rel="canonical" href="/example/(.*?)/(.*?)/(.*?)" /> #is', ' <link rel="canonical" href="/example/$1/$2/$3" /><meta name="ROBOTS" content="NOINDEX, NOFOLLOW">', $body);

但是这段代码替换

<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">

到所有网址。

例如:

example.com/videos/1234
example.com/music/1234
example.com/forum

我只想查找并替换为 4 个 id 的网址 - 而不是 3 或 2 个 id

再次为我的英语打字错误感到抱歉

标签: php

解决方案


在这种情况下,您不需要使用(.*?)url 的每个术语。.*\/.*\/.*\/.*检查它是否有 3 个斜线就足够了。然后将孔分组<link>并替换为$1<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">. 您的preg_replace()应如下所示:

$body = preg_replace('(<link rel="canonical" href=".*\/.*\/.*\/.*" \/>?)', '$1<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">', $body);

一个测试正则表达式的好网站是regex101.com


推荐阅读