我正在使用preg_replace
进行一些后处理并在特定链接上查看链接是否有子域名,如果有,请替换它,如果没有,请添加特定的子域名。我的正则表达式如果它不存在,则当前添加子域,但如果它确实存在,则将其添加两次。
期望的结果示例
输入:http://somesubdomain.example.com/ 输出:http://newsubdomain.example.com/
输入:http://example.com/ 输出http://newsubdomain.example.com/
我目前使用的是:
preg_replace('/(?:.)example\.com\/game\/([a-zA-Z0-9-_,.]+)/','specialsubdomain.example.com/game/$1', $output);
因此,如果有子域,请替换它,如果没有 - 插入它。
非常感谢。
答案 0 :(得分:1)
描述非捕获组中的最终子域并将其设为可选:
$pattern = '~(?:[^/]*\.)?(example\.com/game/[\w,.-]+)~';
$result = preg_replace($pattern, 'specialsubdomain.$1', $output);
答案 1 :(得分:0)
您可以采用Conditional Logic
,preg_split
和implode
的组合方式,如下面的代码所示。逻辑被封装在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。
干杯和好运......