0

私は Regex をほとんど使ったことがありませんが、これは私が作成しているよりも単純でなければならないことを知っています。

次のような URL を指定します。

/p1/p2/{p3}/{p4}/.../{pn}

ここで{p3}{p4}関連配列へのキーが含まれます。

中括弧内の値を中括弧内の値 (より具体的には、これがキーである連想配列の値) に置き換えたい

したがって、これは最終的には

/p1/p2/p3/p4そして最終的に/p1/p2/v3/v4

を空に置き換えるだけでよいと思います'{}'が、置換文字列を元の式の内容と正確に一致させて、配列内のルックアップが機能するようにします。

PHP関数を使用していますpreg_replace

/(\w+)/({\w+})/うまくいかない...

4

3 に答える 3

0

あなたの質問を正しく解析したかどうかはわかりませんが、これは可能な解決策かもしれません:

$pattern = "/p1/p2/{p4}/{p5}/foo/bar/baz";
$values = array(
    'p4' => 'eggs',
    'p5' => 'spam',
);

$pattern_fixed = preg_replace_callback("#{(.*?)}#", function ($match) use ($values) {
    return isset($values[$match[1]]) ? $values[$match[1]] : $match[1];
}, $pattern);

var_dump($pattern_fixed);

出力:

string(28) "/p1/p2/eggs/spam/foo/bar/baz"
于 2013-06-06T19:33:44.883 に答える
0

ほとんどの場合、正規表現なしでこれを達成できます

$str = "/p1/p2/{p4}/{p5}/foo/bar/baz";
$repl = array(
    '{p4}' => 'v3',
    '{p5}' => 'v4',
);

echo str_replace(array_keys($repl), array_values($repl), $str). "\n";

str_replace は、検索および置換パラメーターとして配列も受け入れることに注意してください。

出力:

/p1/p2/v3/v4/foo/bar/baz

ライブデモ: http://ideone.com/bSvOes

于 2013-06-06T20:44:25.547 に答える