2011-07-19 11 views
1

私はproduct/bobのような文字列を取得しようとしていますが、product/my%20first%20productはありません。.htaccessの正規表現でURLから%20を取得するにはどうすればよいですか?

ここに私の正規表現です:

^product/([A-Za-z_\-\s\%20]+)$ 

私が間違ってやっている任意のアイデア?

+0

これは私にとっては効果的です。キャプチャグループでは何をキャプチャしていますか? 「マイ」、空、または何か他に? – NorthGuard

+1

正確に答えるには、この正規表現を使用する場所を指定する必要があります。 'エイリアス'? 'RewriteRule'?どこか別の場所? –

答えて

3

〜これを試してみてください。 \s:これは\またはsと一致する可能性があります。スペースまたはタブではありません。 \%20:これは\と一致し、%,2および0と一致する可能性があります。とにかく、%20を順番に一致させたいと思っています。つまり、ブランチを使用する必要があります。 -を最初または最後に置くと、エスケープする必要はありません。

^product/((?:[A-Za-z_ -]|%20)+)$ 

(?:...)はキャプチャグループ(...)よりも効率的である非キャプチャグループである。)

しかし、私は何でもそれはあなたがターンに%20を使用していることであること、それはかなり可能だと思いますまた、あなたはアロすべきかどうかを検討

^product/([A-Za-z _-]+)$ 

:空白文字に、そしてので、あなただけの空間に\sを回すと\%20を取り除くことができるかもしれw個以上のキャラクター - 私自身は^product/(.*)$または^product/([^/]*)$を使用し、それをあなたのスクリプトなどでさらに処理します。しかし、それはあなたが使っているものにある程度依存しています。あなたがそれを指定していないので、私はすぐに助けません。

+0

'\ s' *はスペースやタブ(およびその他の空白)に一致します。そして '\%'は単に '%'に解決されます(または、より限定的な正規表現エンジンでエラーを引き起こす可能性があります)が、バックスラッシュはマッチしません。 –

+0

@Tim:正規表現エンジンに依存します。 PCREは '\ s'にスペースとタブを合わせますが、全てではありません。例えばVimの正規表現エンジン(これは、かなり多くの点で異なっていると私は認めます)は、 '\ -'以外のコレクションでは魔法をしません。これに基づいて私は私の声明に基づいていました。私は正規表現エンジンが、彼が扱っている '.htaccess'ファイルのどの部分で使われているのか分かりません。だから恐ろしいことではありませんが、*可能性としては完全に有効です*。 –

0

は、あなたの正規表現が使用されている正規表現エンジンに依存し、何を期待しないことがあり、コレクション内のいくつかのことが含まれているとして、あなたが書かれている何

^product/([A-Za-z_-]|%20)+$ 
関連する問題