Практическое руководство. Извлечение протокола и номера порта из URL-адреса
В следующем примере выполняется извлечение протокола и номера порта из URL-адреса.
Пример
В примере используется метод Match.Result для возврата протокола, за которым через двоеточие следует номер порта.
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim url As String = "https://www.contoso.com:8080/letters/readme.html"
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/")
Dim m As Match = r.Match(url)
If m.Success Then
Console.WriteLine(r.Match(url).Result("${proto}${port}"))
End If
End Sub
End Module
' The example displays the following output:
' http:8080
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string url = "https://www.contoso.com:8080/letters/readme.html";
Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/");
Match m = r.Match(url);
if (m.Success)
Console.WriteLine(r.Match(url).Result("${proto}${port}"));
}
}
// The example displays the following output:
// http:8080
Возможные интерпретации шаблона регулярного выражения ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ показаны в следующей таблице.
Шаблон |
Описание |
---|---|
^ |
Соответствие должно обнаруживаться в начале строки. |
(?<proto>\w+) |
Совпадение с одним или несколькими символами слова. Эта группа должна получить имя proto. |
:// |
Соответствует двоеточию, за которым следуют две косые черты. |
[^/]+? |
Соответствует одному или нескольким вхождениям (но как можно меньшему числу) любого символа, отличного от косой черты. |
(?<port>:\d+)? |
Соответствует вхождениям в количестве 0 или 1 двоеточия, за которым следует одна или несколько цифр. Эта группа должна получить имя port. |
/ |
Соответствует косой черте. |
Метод Match.Result разворачивает последовательность замены ${proto}${port}, которая объединяет захваченное значение двух именованных групп в шаблон регулярного выражения. Это удобная альтернатива явному объединению строк, извлеченных из объекта коллекции, который был возвращен свойством Match.Groups.
В следующем примере используется метод Match.Result с двумя подстановками, ${proto} и${port}, для включения захваченных групп в выходную строку. Вместо этого, можно извлечь захваченные группы из соответствующего объекта GroupCollection, как показано в следующем примере кода.
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);