我想将特定链接转移到另一个。模式看起来像这样:
http://domain.com/sub/code/name
至http://a.domain.com/subs/code/name
我在域名前需要a
个字母前缀,sub
将是复数subs
,所有其他内容都需要相等。
当然,该链接可以从http://
,www
,http://www
substr_replace
,strpos
和explode
的混合,我在这项任务上停留了1个多小时,决定问它。
答案 0 :(得分:1)
尝试这样的事情:
/^((?:http://)|(?:http://www\.)|(?:www\.))(\w+)(\.\w+\/)([\w+_\-]+)(\/.*?)$/
#$1YOUR_STRING.$2$3SOMETHING_ELSE$5
RegExr示例:http://regexr.com?38dn0
答案 1 :(得分:1)
你所要求的是相当含糊的,所以我认为“转移”你的意思是“替换为”。如果是这种情况,那么你应该研究正则表达式(或正则表达式)。
正则表达式相对普遍,因此当您学习它们一次时,您可以将它们应用于大多数语言。
在PHP中,您可以使用preg_replace
执行正则表达式替换,但可能有助于首先读取模式的不同元素。
相关链接:
编辑:您所使用的最终结果仍然可以使用您所描述的strpos
,explode
等来实现,但正则表达式可能会让您更快地到达目的地。
答案 2 :(得分:0)
试试这个:
<?php
function convertLink($str)
{
//ensure a scheme exists
if(strpos($str,'http://')===false&&strpos($str,'https://')===false)
{
$str='http://'.$str;
}
$parts=parse_url($str);
$scheme=$parts['scheme'];
$domain=$parts['host'];
$path=array_key_exists('path',$parts)?$parts['path']:'';
$query=array_key_exists('query',$parts)?('?'.$parts['query']):'';
$fragment=array_key_exists('fragment',$parts)?('#'.$parts['fragment']):'';
if(strpos($parts['host'],'www.')===0){$domain=substr($parts['host'],4);}
if(array_key_exists('port',$parts)){$domain.=':'.$parts['port'];}
if(strpos($path,'/sub/')===0){$path='/subs/'.substr($path,5);}
return "{$scheme}://a.{$domain}{$path}{$query}{$fragment}";
}
$links=array();
$links[]='domain.com/sub/code/name';
$links[]='domain.com:20/sub/code/name';
$links[]='www.domain.com/sub/code/name';
$links[]='http://domain.com/sub/code/name';
$links[]='http://www.domain.com/sub/code/name';
$links[]='https://domain.com/sub/code/name';
$links[]='sub.domain.com/sub/code/name';
$links[]='domain.com/sub/code/name?a=1&b=2#c';
echo '<pre>';
foreach($links as $link)
{
echo str_pad($link, 40,' ',STR_PAD_RIGHT).'=> '.convertLink($link)."\n";
}
echo '</pre>';
输出:
domain.com/sub/code/name => http://a.domain.com/subs/code/name domain.com:20/sub/code/name => http://a.domain.com:20/subs/code/name www.domain.com/sub/code/name => http://a.domain.com/subs/code/name http://domain.com/sub/code/name => http://a.domain.com/subs/code/name http://www.domain.com/sub/code/name => http://a.domain.com/subs/code/name https://domain.com/sub/code/name => https://a.domain.com/subs/code/name sub.domain.com/sub/code/name => http://a.sub.domain.com/subs/code/name domain.com/sub/code/name?a=1&b=2#c => http://a.domain.com/subs/code/name?a=1&b=2#c