2016-07-19 13 views
0

preg_replaceを使用して、いくつかの後処理と特定のリンクでリンクにサブドメインがあるかどうかを確認している場合は置換し、置換しない場合は特定のサブドメインを追加します。存在しない場合はサブドメインを追加しますが、既に存在する場合はそれを2度追加します。オプションのサブドメインを置換する

望ましい結果の例

入力: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); 

だからがある場合サブドメイン、replそれがない場合はそれを挿入してください。

ありがとうございます。

+0

元の文字列は何を含んでいますか? URLのみ? –

+0

申し訳ありません。ただの単なるURLです。 – XanT

+0

あなたの現在の問題ではなく、 '(?:。)'の '.'をエスケープする必要があります。また、URLで作業するときに別の区切り文字を使用することをおすすめします。 – chris85

答えて

1

は非キャプチャグループの最終的なサブドメインを説明し、それをオプションに:次のコードに示すように、あなたがそれを行うことができ

$pattern = '~(?:[^/]*\.)?(example\.com/game/[\w,.-]+)~'; 
$result = preg_replace($pattern, 'specialsubdomain.$1', $output); 
+0

パーフェクト。ありがとうございました。 – XanT

0

一つの方法はConditional Logicpreg_splitimplodeの組み合わせです。 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を試してください。

乾杯と幸運...

関連する問題