0

( を含む) およびにリダイレクト/spam/(.*)したいが、またはにはリダイレクトしたくない。/$1/spam///spam//spam(.*)$1/$1

そう/spam/eggs/baconなり/eggs/bacon/spam/なり/spam、なり/、なりspameggs/baconませんeggs/bacon

(chars)これを実現する$1ペアとなる正規表現は何ですか?

4

3 に答える 3

1

^.*((?<=^/spam/).*|(?<=^/spam))$非常に簡単です:/$1

テストhttp://ideone.com/YqAAA):

'/spam'          --> '/'
'/spam/'         --> '/'
'/spam/one'      --> '/one'
'/spam/one/two'  --> '/one/two'
于 2012-08-21T00:51:23.783 に答える
1

RegExpフレーバーについてはよくわかりませんが、次のようなものを試してみます…</ p>

/(spam($|/))?(.*)==>/$3

これがPHPの例です。

$rx = '~/(spam($|/))?(.*)~';
$arr = array(
    '/spam',
    '/spam/',
    '/spam/eggs/bacon',
    'spameggs/bacon',
    '/spameggs/bacon'
);
foreach ($arr as $val) {
    echo "<b>Before:</b> $val\n<b>After:</b> " . preg_replace($rx,'/$3',$val) . PHP_EOL.PHP_EOL;
}

出力

前: / spam
後: /

前: / spam /
後: /

前: / spam / eggs / bacon
後: / eggs / bacon

前: spameggs / bacon
後: spameggs / bacon

前: / spameggs / bacon
後: / spameggs / bacon

于 2012-08-21T00:55:05.850 に答える
0

パターン:/spam(?:/(.*)|()$)

交換:/$1

これは正しく置き換えられ、これまでに投稿されたソリューションの中で最も単純であり、パスが検討している形式でない場合(つまり、一致しない場合、/spamまたは一致しない場合)、一致が失敗するという追加のボーナスがあります/spam/___)

于 2012-08-21T00:53:39.283 に答える