抱歉我的英文打字不好。
我想要添加标记<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
。再次抱歉我的英文打字错误
答案 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);