在.NET中使用基型別(.NET 指南)

風靈使發表於2019-04-14

如何:從 URL 中提取協議和埠號

下面的示例從 URL 中提取協議和埠號。

示例

此示例使用 Match.Result方法返回協議,後面依次跟的是冒號和埠號。

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
      string url = "http://www.contoso.com:8080/letters/readme.html";

      Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
                          RegexOptions.None, TimeSpan.FromMilliseconds(150));
      Match m = r.Match(url);
      if (m.Success)
         Console.WriteLine(r.Match(url).Result("${proto}${port}")); 
   }
}
// The example displays the following output:
//       http:8080

[!code-vbRegularExpressions.Examples.Protocol#1]

正規表示式模式 ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ 可按下表中的方式解釋。

模式 描述
^ 從字串的開頭部分開始匹配。
(?<proto>\w+) 匹配一個或多個單詞字元。 將此組命名為 proto
:// 匹配後跟兩個正斜線的冒號。
[^/]+? 匹配正斜線以外的任何字元的一次或多次出現(但儘可能少)。
(?<port>:\d+)? 匹配後跟一個或多個數字字元的冒號的零次或一次出現。 將此組命名為 port
/ 匹配正斜線。

Match.Result方法擴充套件 ${proto}${port} 替換序列,以連線在正規表示式模式中捕獲的兩個命名組的值。 便捷的替換方法是,顯式連線從 Match.Groups屬性返回的集合物件檢索到的字串。

此示例使用有兩處替換(${proto}${port})的 Match.Result方法,在輸出字串中新增捕獲組。 可以改為從匹配的 GroupCollection物件檢索捕獲組,如下面的程式碼所示。

Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value); 

相關文章