2

古いサイトから新しいサイトの同等のページへの着信リンクのリダイレクトを処理するために、いくつかの正規表現をまとめています。正規表現で次の状況を処理できることを望んでいるので、バックエンドでそれを行う必要はありません。

着信リンク:/reservations/inn_details.asp?num = 717

リダイレクトされたリンク:/reservations/property-detail.aspx?pid=00717

ご覧のとおり、リダイレクトされたリンクでは、717の元のクエリ文字列値は00717である必要があります。ルールでは、これらのIDはすべてリダイレクトされたURLで5文字の長さである必要があります。

だから私の質問は:正規表現内でクエリ文字列値がいくつの文字であるかを把握し、それに5文字に等しくなるのに十分な先頭の0を追加することは可能ですか?

値が1、2、3、または4桁の長さの場合をカバーするために、4つの個別の正規表現を実行できますが、すべてを1回の急降下で処理する方がはるかにクールです。

ありがとう、B。

4

5 に答える 5

6

残念ながら、これは正規表現だけで処理できるものではありません。最も簡単な修正は、ゼロパディングを行うようにproperty-detail.aspxを変更することだと思います。

つまり、正規表現を「/reservations/property-detail.aspx?pid=717」にリダイレクトし、aspxファイルでpidの前に必要なゼロを追加してから、データをフェッチします。とにかくその入力をサニタイズするためのコードが必要です(または少なくとも私はそう願っています)ので、そのセクションに簡単に追加できます。

于 2009-04-15T16:14:29.420 に答える
2

mod_rewrite を使用する場合は、次の方法があります。

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)num=(\d+)(.*)
RewriteCond 0000%3 ^0+(\d{5})$
RewriteRule ^/reservations/inn_details\.asp$ /reservations/property-detail.aspx?pid=%1 [L,R=301]
于 2009-04-15T16:35:05.017 に答える
0

[?&]num=(\d+)あなたのための値を取得します。ただし、正規表現はロジックを実装せず、パターン認識のみを実装します。言語またはツールセットは、それを分析して処理する方法を提供する必要があります。

たとえば、perl では次のようにします。

s/([?&])num=(\d+)/sprintf( "%spid=%5.5d", $1, $2 )/e;

しかし、もちろん、それは変革の問題の 1 つに対処するだけです。

于 2009-04-15T16:40:04.053 に答える
0

ランダムな正規表現の実装で何が起こるかはわかりませんが、少なくとも実際の正規表現では違います。

于 2009-04-15T16:16:13.627 に答える
0

正規表現を呼び出している汎用言語について説明していません。ただし、ほとんどの言語では、正規表現を使用してテキストを照合および置換する機能が提供されています。文字列の数値部分を一致させてから、言語の機能を使用して数値の先頭にゼロを埋め込みます。

于 2009-04-15T16:18:10.863 に答える