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

私が欲しい出力はですがexample.com/folder、私が今得ているのはexample.com..folder

これは、適切な正規表現パターンがないためですが、そのパターンはどうなるでしょうか。

4

3 に答える 3

2

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

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

代替案:

  • preg_replaceREを評価する順序で、への複数の呼び出しを使用します。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);
    
于 2009-10-22T01:38:04.150 に答える
0

これはPHPですよね?

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

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

中括弧は「前のパターンのnを正確に要求する」と言います

ここに良いリファレンスがあります。

于 2009-10-22T01:11:31.267 に答える
0

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

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

これが言うことは、「前後にダッシュがないものに一致し、それを。に置き換える」ということです。および「matchdouble--with/」。明らかに、これを拡張して、fromとbackに([^-])を追加するだけで、2番目の一致を2ダッシュに制限できます。そのままでは「-----」は「//」になりますが、これは望ましくないかもしれません。

于 2009-10-22T01:19:12.423 に答える