2016-05-08 10 views
0

配列のような文字列にドットで区切られた文字列でdotsを交換するための最も効率的なパターンは何例えばx.y.z -> x[y][z]regexpを使って "x.y.z"を "x [y] [z]"に変換することはできますか?ここで

は私の現在のコードですが、私は正規表現を使用して短くする方法があるはずですね。

あなたの特定のケースで
function convert($input) 
{ 
    if (strpos($input, '.') === false) { 
    return $input; 
    } 
    $input = str_replace_first('.', '[', $input); 
    $input = str_replace('.', '][', $input); 

    return $input . ']'; 

} 
+0

パターンは*変換*しません。 – Maroun

+0

preg_replace_callback()をおそらく使用する –

+0

最初の '.'を' ['、' '[' 'で置き換えてください。文字列関数で十分です。 –

答えて

5

は、アレイのような文字列」簡単preg_replace機能使用して取得することができます。私はあなたの質問から理解できるものから、

$input = "x.d.dsaf.d2.d"; 
print_r(preg_replace("/\.([^.]+)/", "[$1]", $input)); // "x[d][dsaf][d2][d]" 
+0

優れています。ありがとう。 – PHPst

+0

@PHPst、あなたは大歓迎です – RomanPerekhrest

0

を。 "x.y.z"は文字列なので、"x [y] [z]"は右でしょうか?その場合は、次のコードスニペットを試してみることにしたい場合があり :

 <?php   
      $dotSeparatedString = "x.y.z"; 
      $arrayLikeString = ""; 
      //HERE IS THE REGEX YOU ASKED FOR... 
      $arrayLikeString = str_replace(".", "", preg_replace("#(\.[a-z0-9]*[^.])#", "[$1]", $dotSeparatedString)); 

      var_dump($arrayLikeString);  //DUMPS: 'x[y][z]' 

はかなり単純なpreg_replace_callback()単にリターンを使用したけれども....

0

、それはあなたのお役に立てば幸いです他の発生と比較して.の最初の出現のための異なる置換。

$in = "x.y.z"; 

function cb($matches) { 
    static $first = true; 
    if (!$first) 
     return ']['; 
    $first = false; 
    return '['; 
} 

$out = preg_replace_callback('/(\.)/', 'cb', $in) . ((strpos('.', $in) !== false) ? ']' : ']'); 
var_dump($out); 

三APPENDは、すでに答えていますが、単純に文字列を再構築区切り、その後の期間に爆発する可能性があり

0

を交換することがない.のケースを処理することです。

$in = 'x.y.z'; 

$array = explode('.', $in); 

$out = ''; 

foreach ($array as $key => $part){ 
    $out .= ($key) ? '[' . $part . ']' : $part; 
} 

echo $out; 
関連する問題