2012-02-27 23 views
1

私のアプリケーションでは、URLを読み、URLに基​​本認証資格が含まれている場合は何かを行う必要があります。そのようなURLの例はRegex for HTTP URLの基本認証

http://username:[email protected]

が私の仕事のために良いフィット、以下の正規表現ですか?私は4つのグループをローカル変数に取り込みます。 URLは、別の内部ライブラリに渡され、接続を開始する前にURLが有効であることを確認するための作業を行います。

^(.+?//)(.+?):(.+?)@(.+)$ 

答えて

3

この場合は正規表現が良いと思います提案のカップル:

1)私はつまり、名前のグループがあなたのコードをより読みやすくするだろうと思う:

^(?<protocol>.+?//)(?<username>.+?):(?<password>.+?)@(?<address>.+)$ 

その後、あなたは、単に

Match match = Regex.Match(string, pattern); 
if (match.Success) { 
    string user = match.Groups["username"]; 

2を書くことができます)あなたが作ることができますより厳密な表現、例えば.するのではなく、可能\wを使用して:

^(?<protocol>\w+://)... 
+0

ニース!正規表現が名前付きグループを持つことができるかどうかは分かりませんでした。 – Mike

+0

これをより広く適用しようとする際の1つの問題:basic authには、ユーザー名とパスワードの両方が必要ありません。例: 「http:// user @ domain.com」 –

3

あなたの正規表現はOKらしいが、なぜ使用しないで徹底的にテストされたとUri classほぼ準拠?スペック互換性について心配することなく、あなたが望む作品にアクセスするのは簡単です:

var url = new Uri("http://username:[email protected]"); 
var userInfo = url.UserInfo.Split(':'); 
var username = userInfo[0]; 
var password = userInfo[1]; 
+0

私はできますが、私はウリができないことをする必要があります。私のユーザはwebdav Urisに対してhttp://の代わりにwebdav://を入力します。 – Mike

+0

@Mike:ウリはそれを扱えないのですか?それは[Monoでうまくいく](http://ideone.com/TrClc)。 – Cameron

+0

私はJavaで持っている別の製品でjava.net.Uriが処理できなかったので、試しても気にしませんでした。 – Mike