Reputation: 607
I am doing some post-processing and on a specific link using preg_replace
to see if a link has a subdomain and if it does, replace it and if it does not - add a specific subdomain in. My regex currently adds the subdomain in if it does not exist however if it does exist already it add's it twice.
Desired result examples
Input: http://somesubdomain.example.com/ Output: http://newsubdomain.example.com/
Input: http://example.com/ Output http://newsubdomain.example.com/
What I am currently using:
preg_replace('/(?:.)example\.com\/game\/([a-zA-Z0-9-_,.]+)/','specialsubdomain.example.com/game/$1', $output);
So if there is a subdomain, replace it, if there is not - insert it.
Thanks a lot.
Upvotes: 0
Views: 132
Reputation: 7617
One way you could do that is with a combination of Conditional Logic
, preg_split
and implode
as illustrated in code below. The Logic was encapsulated in a function
for re-usability.
<?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/
Test it out here.
Cheers and Good Luck...
Upvotes: 0
Reputation: 89557
Describe the eventual subdomain in a non-capturing group and make it optional:
$pattern = '~(?:[^/]*\.)?(example\.com/game/[\w,.-]+)~';
$result = preg_replace($pattern, 'specialsubdomain.$1', $output);
Upvotes: 1