1

以下は、不要なクエリ文字列 (excludeList に存在するもの) を削除するための C#2.0 コードで記述された正規表現であり、ページのクエリ文字列から除外され、私にとっては正常に機能しています。

string querystring = string.Empty;                       
string excludeList = "cid,incid,h";                        
querystring = Regex.Replace(Regex.Replace(Regex.Replace(HttpContext.Current.Request.Url.Query, @"^\?", "&"), "&(" + excludeList.Replace(",", "|") + ")=[^&]*", "", RegexOptions.IgnoreCase), "^&", "?");

ここで、正規表現を変更して、excludeList に以下が含まれている場合、ページのクエリ文字列に < または > がある場合にエンコードするようにします。

string excludeList = "cid,incid,h,<,>"; 

たとえば、ページのクエリ文字列に何かが含まれている場合、適切な #343script#545 にエンコードする必要があります (例)

エンコーディングを処理するために必要な変更を提案してください。

ありがとう。

編集:

言う

HttpContext.Current.Request.Url.Query = "http://localhost:80/faq.aspx?faqid=123&cid=5434&des=dxb&incid=6565&data=<sam>";
string excludeList = "cid,incid,h,<,>";  

上記の正規表現を上記のクエリ文字列変数に適用すると、以下のようにレンダリングされます

string querystring = Regex.Replace(Regex.Replace(Regex.Replace(HttpContext.Current.Request.Url.Query, @"^\?", "&"), "&(" + excludeList.Replace(",", "|") + ")=[^&]*", "", RegexOptions.IgnoreCase), "^&", "?");

querystring = "?faqid=123&des=dxb&data=%3C%20sam%20%3E";

上記のすべてが正常に機能するようになりました。上記の正規表現を使用して「<」と「>」をエンコードしたいと思います。

4

1 に答える 1

1

これを試して

(?is)^(?<del>[^\?]+?)(?<retain>\?.+)$

説明

@"
(?is)         # Match the remainder of the regex with the options: case insensitive (i); dot matches newline (s)
^             # Assert position at the beginning of the string
(?<del>       # Match the regular expression below and capture its match into backreference with name “del”
   [^\?]         # Match any character that is NOT a ? character
      +?            # Between one and unlimited times, as few times as possible, expanding as needed (lazy)
)
(?<retain>    # Match the regular expression below and capture its match into backreference with name “retain”
   \?            # Match the character “?” literally
   .             # Match any single character
      +             # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
)
$             # Assert position at the end of the string (or before the line break at the end of the string, if any)
"

コードを更新する

string resultString = null;
try {
    resultString = Regex.Replace(subjectString, @"(?is)^(?<del>[^?]+?)(?<retain>\?.+)$", "${retain}");
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}
于 2012-05-29T10:02:16.257 に答える