更改preg_replace网址

时间:2018-06-06 11:10:57

标签: php

抱歉我的英文打字不好。

我想要添加标记<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

我想找到&amp;替换为4个ID的网址 - 而不是3个或2个ID

再次抱歉我的英文打字错误

2 个答案:

答案 0 :(得分:0)

在这种情况下,您不需要为网址的每个字词使用(.*?)。如果它有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

答案 1 :(得分:-1)

你能试试吗?

$body = preg_replace('# <link rel="canonical" href="/example/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)" /> #is', ' <link rel="canonical" href="/example/$1/$2/$3" /><meta name="ROBOTS" content="NOINDEX, NOFOLLOW">', $body);