質問

$url = "example-com--folder";
$searchArray = array('/-/','/--/');
$replaceArray = array('.','/');
$url = preg_replace($searchArray, $replaceArray, $url);

必要な出力は example.com/folder ですが、現在入手できるのは example.com..folder

です

これは適切な正規表現パターンがないためだとわかっていますが、そのパターンはどうなりますか?

役に立ちましたか?

解決

'/-/' および '/-/' パターンの順序を変更して、 '/-/' 最初にチェックされます。そうでない場合、 '/-/' '/-/' に勝ります。 preg_replace の呼び出しで配列を補間しないでください。

$url = "example-com--folder";
$searchArray = array('/--/', '/-/');
$replaceArray = array('/', '.');
$url = preg_replace($searchArray, $replaceArray, $url);

代替案:

  • REを評価する順序で preg_replace を複数回呼び出します。これは、 preg_replace が配列をループし、各REを順番に処理するため、考えられるほど好ましくありません。
  • 評価された代替品を使用

    $url = "www-example-com--folder";
    $replacements = array('-' => '.', '--' => '/');
    $url = preg_replace('/(--?)/e', '$replacements["$1"]', $url);
    
  • 先読みと後読み

    $url = "www-example-com--folder";
    $searchArray = array('/(?<!-)-(?!-)/', '/--/');
    $replaceArray = array('.', '/');
    $url = preg_replace($searchArray, $replaceArray, $url);
    

他のヒント

これはPHPですか?

2番目のパターンに正確に2つのハイフンが必要であることを指定するには、数量詞が必要です。試してください:

$searchArray = array('/-/','/-{2}/');

中括弧には、「前のパターンの正確に n が必要」と表示されます

適切なリファレンスです。

これが機能するかどうかを確認します:

$url = "example-com--folder";
$searchArray = array('([^-])-([^-])','--');
$replaceArray = array('$1.$2','/');
$url = preg_replace("$searchArray", "$replaceArray", $url);

これは、「すべてに一致-前後にダッシュがなく、それを。に置き換えます」という意味です。および&quot; match double-with /&quot;。明らかに、これを拡張して2番目の一致を2つのダッシュに制限するには、先頭と末尾に([^-])を追加するだけです。そのまま、&quot; -----&quot; &quot; //&quot;になりますが、これは望ましくありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top