1

要求されたURLファイル名のチャンクを最大2文字に分割してから、ディレクトリ構造に書き換えたいと思います。

入力(行ごと):

a.txt
ba.txt
cba.txt
dcba.txt
edcba.txt
fedcba.txt
gfedcba.txt
hgfedcba.txt

必要な出力:

a/file.txt
ba/file.txt
c/ba/file.txt
dc/ba/file.txt
e/dc/ba/file.txt
fe/dc/ba/file.txt
g/ef/dc/ba/file.txt
hg/ef/dc/ba/file.txt

達成された出力(以下の正規表現を使用):

///a/file.txt
///ba/file.txt
//c/ba/file.txt
//dc/ba/file.txt
/e/dc/ba/file.txt
/fe/dc/ba/file.txt
g/fe/dc/ba/file.txt
hg/fe/dc/ba/file.txt

正規表現:

([a-z]{1,2}?)??([a-z]{1,2}?)??([a-z]{1,2}?)??([a-z]{1,2})??\.txt

置換:

$1/$2/$3/$4/file.txt

一致を繰り返して各反復をキャプチャする方法が見つかりませんでした。

残念ながら、$ 1〜 $ 3の一致が見つからない場合でも、この置換テキストによってスラッシュが書き込まれます。

4

2 に答える 2

0

.NET Group.Captures プロパティを使用して方法を見つけました

LinqPad スニペット:

string inputUrl= "/gfedcba.txt";
string pattern = @"/([a-z]{1,2})+\.txt";
string rewrittenUrl = inputUrl;

Match match = Regex.Match(inputUrl, pattern, RegexOptions.RightToLeft);

if(match.Success){
    var captures = match.Groups[1].Captures;
    rewrittenUrl="";
    for(int i = captures.Count; i > 0; i--) {
        rewrittenUrl += "/" + captures[i-1].Value;
    }
    rewrittenUrl += ".txt";
}

"inputUrl:".Dump();
inputUrl.Dump();
"rewrittenUrl:".Dump();
rewrittenUrl.Dump();

LinqPad 出力:

入力 URL:

/gfedcba.txt

書き換えられた URL:

/g/fe/dc/ba.txt

ここで、カスタム IIS Url Rewrite Providerを作成します。

于 2012-08-31T07:20:12.067 に答える
0

あなたは完全に明確ではありません。可能であれば同じ文字を 2 回、それ以外の場合は 1 回だけ一致させたいという前提で試してみました。そうでない場合、パターンはもう少し複雑になりますが、これを行う方法の例を次に示します: http://regex101.com/r/nG4tZ9

/^|\G(([a-z])\2?)/gm

これを代わりに使用します。\1/

これにより、次の結果が得られます。

/a/.txt
/aa/.txt
/b/aa/.txt
/bb/aa/.txt
/c/bb/aa/.txt
/cc/bb/aa/.txt
/d/cc/bb/aa/.txt
/dd/cc/bb/aa/.txt

パーツをスムーズに挿入する方法がわかりfile.txtません。適切な言語がなければそれが可能かどうかは完全にはわかりません.

正規表現で提示した以上のことを行うことはお勧めしません。代わりに小さな関数を書きます。

これは URL の書き換えであるため、率直に言って、適切な解決策があるかどうかはわかりません。独自のスクリプト ファイルでこれを処理してから、ヘッダーを使用してそこからリダイレクトすることができます。私は専門家ではありません。誰かがより良い解決策を持っていると確信しています。

幸運を。

于 2012-08-27T09:05:58.850 に答える