質問
$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;になりますが、これは望ましくありません。
所属していません StackOverflow