一つの方法はConditional Logic
、preg_split
とimplode
の組み合わせです。 Logicは、再利用性のためにfunction
にカプセル化されています。
<?php
function replaceDomainName($mainDomain, $subDomainName){
$arrMainDomainSplit = preg_split("#\.#i", $mainDomain);
$arrHTTPParts = array();
$strNewSubDomain = "";
if(preg_match("#:\/\/#", $arrMainDomainSplit[0])){
$arrHTTPParts = preg_split("#:\/\/#i", $arrMainDomainSplit[0]);
}
if(count($arrMainDomainSplit)>2){
if(!empty($arrHTTPParts)){
array_splice($arrMainDomainSplit, 0, 1);
$strNewSubDomain .= $arrHTTPParts[0] . "://{$subDomainName}." . implode(".", $arrMainDomainSplit);
}
}else if(count($arrMainDomainSplit)<=2){
array_splice($arrMainDomainSplit, 0, 1);
$strNewSubDomain .= $arrHTTPParts[0] . "://{$subDomainName}.{$arrHTTPParts[1]}." . implode(".", $arrMainDomainSplit);
}
return $strNewSubDomain;
}
$mainDomain1 = "http://somesubdomain.example.com/";
$mainDomain2 = "http://example.com/";
$subDomain1 = replaceDomainName($mainDomain1, "newsubdomain");
$subDomain2 = replaceDomainName($mainDomain2, "newsubdomain");
var_dump($subDomain1); //<== YIELDS:: http://newsubdomain.example.com/
var_dump($subDomain2); //<== YIELDS:: http://newsubdomain.example.com/
hereを試してください。
乾杯と幸運...
元の文字列は何を含んでいますか? URLのみ? –
申し訳ありません。ただの単なるURLです。 – XanT
あなたの現在の問題ではなく、 '(?:。)'の '.'をエスケープする必要があります。また、URLで作業するときに別の区切り文字を使用することをおすすめします。 – chris85