UserAgent文字列といくつかの正規表現を比較して、C#コードでブラウザを検出しようとしています。RegExを使用してASP.NETでブラウザを検出する
ただ、ASP.NETのHttpBrowserCapabilitiesオブジェクトを使用するのではなく、このアプローチを使用するのは、200のブラウザとそのOSに対応する200以上の正規表現のリストを受け取ったためです。私はより詳細な情報を得ることができます。私は正規表現マッチが成功することを期待していますが、何らかの理由で、試合はfalseを返します。この例では
var sampleUserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)";
var ieRegEx = "/^Mozilla\/4.0 \(compatible; MSIE ([0-9\.]+); Windows/si";
var success = Regex.Match(sampleUserAgent, regEx.RegularExpression, RegexOptions.IgnoreCase).Success;
:
は、ここでのサンプルです。正規表現が正しくないと推測しています。
私は正規表現を書いていませんでしたが、私はRegEx構文にはあまり慣れていないので、誰でも私が正規表現に何が間違っているのか理解できますか?
確かにあなたが提案した正規表現は成功です。 "/"を "/"に置き換え、最後の "/ si"を "。* \)$"に置き換えました(途中で何を意味するのでしょうか?)。 これらの変更を200個程度の正規表現の文字列に適用して、それがIE正規表現だけでなく他のすべての問題を解決するかどうかを確認します。 – desautelsj
^行の先頭にアンカーを付け、/スラッシュをエスケープする必要はありません(\はエスケープ文字です)。 $は行末に一致します。 *。任意の文字列に一致します。 http://regexlib.com/CheatSheet.aspx –
cheatsheetへのリンクありがとうございます。非常に有益!最後の1つの質問:元の正規表現で "\ si"が何を意味するか考えていますか?私はチートシートにそれについて何の言及も見ません。文字列の最後には何文字も一致させるために "。* $"と置き換えていますが、元の正規表現の作成者の意図は理解できません。 – desautelsj