( を含む) およびにリダイレクト/spam/(.*)
したいが、またはにはリダイレクトしたくない。/$1
/spam/
/
/spam
/
/spam(.*)
$1
/$1
そう/spam/eggs/bacon
なり/eggs/bacon
、/spam/
なり/spam
、なり/
、なりspameggs/bacon
ませんeggs/bacon
。
(chars)
これを実現する$1
ペアとなる正規表現は何ですか?
^.*((?<=^/spam/).*|(?<=^/spam))$
非常に簡単です:/$1
'/spam' --> '/'
'/spam/' --> '/'
'/spam/one' --> '/one'
'/spam/one/two' --> '/one/two'
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
パターン:/spam(?:/(.*)|()$)
交換:/$1
これは正しく置き換えられ、これまでに投稿されたソリューションの中で最も単純であり、パスが検討している形式でない場合(つまり、一致しない場合、/spam
または一致しない場合)、一致が失敗するという追加のボーナスがあります/spam/___)