1

私は正規表現が初めてで、URL で使用しようとしてきましたが、うまくいきません。

次の文字列があります。

/プラグイン/プラグイン/プラグイン/プラグイン/プラグイン/プラグイン/

文字列が次のようになるように、すべての文字を文字列「{char}」に置き換えたいと思います。

/{文字}/{文字}/{文字}/{文字}/{文字}/{文字}/

私はこれを試しました:

<?php
    $pattern        = '#(/)([a-z\_]+)(/)#'; 
    $replacement    = '$1{char}$3'; 
    $string         = '/plugins/plugins/plugins/plugins/plugins/plugins/';

    echo preg_replace($pattern, $replacement, $string);
?>

しかし、このコードの結果は次のようになります。

/{char}/plugins/{char}/plugins/{char}/plugins/

私は何を間違っていますか?

4

1 に答える 1

3

問題は、正規表現が一致していることです/plugins/-先頭と末尾の両方でスラッシュが一致しています。各文字は正規表現によって 1 回だけ一致するため、スラッシュが 1 つの単語の末尾で一致した場合、別の単語の開始としてカウントすることはできません。したがって、それは他のすべてのものにのみ一致します。

代わりにこれを試してください:

<?php
    $pattern        = '#(/)([a-z\_]+)(?=/)#'; 
    $replacement    = '$1{char}'; 
    $string         = '/plugins/plugins/plugins/plugins/plugins/plugins/';

    echo preg_replace($pattern, $replacement, $string);
?>

最後のスラッシュを実際に照合する (そしてそれを「消費する」) 代わりに、 lookaheadを使用して機能し、そこにあることを確認するだけです。

于 2012-08-25T16:17:02.037 に答える