Como: Extrair um protocolo e o número da porta de uma URL
O exemplo a seguir extrai um número de porta e protocolo de uma URL.
Exemplo
O exemplo usa o Match.Result método para retornar o protocolo, seguido por dois-pontos seguido pelo número de porta.
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
O padrão de expressão regular ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ podem ser interpretados como mostrado na tabela a seguir.
Padrão |
Descrição |
---|---|
^ |
Começa a correspondência no início da seqüência de caracteres. |
(?<proto>\w+) |
Corresponde a um ou mais caracteres do word. Este grupo proto. |
:// |
Coincide com dois-pontos seguido por duas barras. |
[^/]+? |
Corresponde a um ou mais ocorrências (mas menor quantidade possível) de qualquer caractere diferente de uma barra diagonal. |
(?<port>:\d+)? |
Corresponde à ocorrência de zero ou um de dois-pontos seguido por um ou mais caracteres de dígito. Este grupo port. |
/ |
Corresponde a uma barra diagonal. |
O Match.Result método expande a ${proto}${port} seqüência de substituição, que concatena o valor dos dois grupos nomeados capturados no padrão de expressão regular. É uma alternativa conveniente para explicitamente concatenar as seqüências de caracteres recuperadas do objeto da coleção retornado pelo Match.Groups propriedade.
O exemplo usa o Match.Result método com duas substituições, ${proto} e ${port}, para incluir os grupos capturados na seqüência de caracteres de saída. Você pode recuperar os grupos capturados da correspondência GroupCollection de objeto em vez disso, como o código a seguir mostra.
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);