【问题标题】:C# Regex URL Port username & passwordC# 正则表达式 URL 端口用户名和密码
【发布时间】:2017-05-25 20:23:57
【问题描述】:

我有一个 URL,需要从中提取端口、用户名和密码并将它们放入一个数组中。如下所示。

http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts

我可以使用其他不带替换或子字符串的方法吗?

【问题讨论】:

  • 你试过了吗?
  • 如果您已经尝试过,请在您的问题中发布您的代码。如果您还没有尝试过任何东西,请尝试一下,然后就您遇到的具体问题与我们联系。
  • @Adrian:这不是重复的。如果有效,OP 要求从不匹配的 URL 中提取数据。
  • 这已经内置在Uri类中;调查new Uri(yourUri).PortUri.GetComponents()

标签: c# arrays regex string url


【解决方案1】:

C#中的一种方式

获取查询参数

var parsedQuery = HttpUtility.ParseQueryString("http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts");

然后,下面会给出用户名

parsedQuery["username"] 

密码:

parsedQuery["password"] 

对于端口,您可以使用URI

Uri uri = new Uri("http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts");

获取端口

uri.Port

创建一个阵列或使用任何您需要的俱乐部。

【讨论】:

  • 看起来不错,但我认为您需要互联网连接(我知道我没有在我的帖子中说明这一点)但我们需要能够将链接添加到列表中,即使我们处于离线状态.我们输入的链接“100%”有效,但我真的很喜欢你的方法,并将在我的下一个项目中记住它:)
  • 但是为什么你需要互联网连接呢?你能解释一下吗?
  • 对不起,我认为这也会检查它是否可用
【解决方案2】:

我不懂 C#,但这里有一个适用于 Python。它非常简单,因此您应该能够转换。

:(?P<port>[0-9]+).*username=(?P<username>[a-zA-Z0-9]+).*password=(?P<password>[a-zA-Z0-9]+)

(?Pbar) 语法是一个命名的捕获组,当您提取它们时,它会将与模式“bar”匹配的变量放入名为“foo”的变量中。

【讨论】:

    【解决方案3】:

    这是另一种使用纯 C# 正则表达式的可能解决方案:

    var url = "http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts";
    var urlRegex = new Regex(@"(?<=(http(s)?://)?\w+(\.\w+)*:)\d+(?=/.*)?");
    var usernameRegex = new Regex(@"(?<=(\?|&)username=).*?(?=&|$)", RegexOptions.IgnoreCase);
    var passwordRegex = new Regex(@"(?<=(\?|&)password=).*?(?=&|$)", RegexOptions.IgnoreCase);
    
    Console.WriteLine(urlRegex.Match(url));
    Console.WriteLine(usernameRegex.Match(url));
    Console.WriteLine(passwordRegex.Match(url));
    

    【讨论】:

      【解决方案4】:

      如果有任何部分不变,例如如果它总是相同的 url,你可以像这样替换它

      string str = "http://myproject.ddns.net:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts"
      str.Replace("http://myproject.ddns.net","");
      

      这会让你“:8080/get.php?username=9zu7T54rt6&password=1Tbliu49iH&type=m3u_plus&output=ts”

      没有什么能阻止你在另一个部分重复这个过程。

      至于正则表达式,您可以使用 Regex.Match https://msdn.microsoft.com/en-us/library/twcw2f1c(v=vs.110).aspx 来获取您想要的部分。

      您可以使用 ":\d{4}/" 来获取端口 - 但是您必须去掉前导“:”和尾随“/”;这个 "username=\w*\&" 来获取用户名 - 你必须去掉前导的 "username=" 和尾随的 "&";对于密码,您可以使用 "password=\w*\&" - 不过,您必须去掉前导的“password=”和尾随的“&”。

      如果您想尝试使用正则表达式,这个网站https://regex101.com/ 非常好。

      【讨论】:

      • 这就是我之前的做法^^但对我来说看起来很脏
      猜你喜欢
      • 1970-01-01
      • 2015-06-11
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2015-08-22
      • 2012-07-18
      • 2010-10-01
      相关资源
      最近更新 更多