具有基本身份验证的 HTTP URL 的正则表达式

Mik*_*ike 4 c# regex url

在我的应用程序中,如果 URL 包含基本身份验证凭据,我必须读取 URL 并执行某些操作。此类 URL 的示例是

http://用户名:密码@example.com

下面的正则表达式适合我的任务吗?我要将四个组捕获到局部变量中。URL 将被传递到另一个内部库,该库将在打开连接之前执行进一步的工作以确保 URL 有效。

^(.+?//)(.+?):(.+?)@(.+)$
Run Code Online (Sandbox Code Playgroud)

Pao*_*sco 7

看起来不错,我认为在这种情况下使用正则表达式很好。一些建议:

1)我认为命名组将使您的代码更具可读性,即:

^(?<protocol>.+?//)(?<username>.+?):(?<password>.+?)@(?<address>.+)$
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地写

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

2)然后你可以使表达式更严格一点,例如\w在可能的情况下使用而不是.

^(?<protocol>\w+://)...
Run Code Online (Sandbox Code Playgroud)


Cam*_*ron 5

您的正则表达式似乎没问题,但为什么不使用经过彻底测试且几乎兼容的Uri呢?这样就可以轻松访问您想要的部分,而不必担心规范兼容性:

var url = new Uri("http://username:password@example.com");
var userInfo = url.UserInfo.Split(':');
var username = userInfo[0];
var password = userInfo[1];
Run Code Online (Sandbox Code Playgroud)