在我的应用程序中,如果 URL 包含基本身份验证凭据,我必须读取 URL 并执行某些操作。此类 URL 的示例是
下面的正则表达式适合我的任务吗?我要将四个组捕获到局部变量中。URL 将被传递到另一个内部库,该库将在打开连接之前执行进一步的工作以确保 URL 有效。
^(.+?//)(.+?):(.+?)@(.+)$
Run Code Online (Sandbox Code Playgroud)
看起来不错,我认为在这种情况下使用正则表达式很好。一些建议:
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)
您的正则表达式似乎没问题,但为什么不使用经过彻底测试且几乎兼容的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)
| 归档时间: |
|
| 查看次数: |
6342 次 |
| 最近记录: |