Como: extrair um protocolo e um número da porta de uma URL
O exemplo a seguir extrai um protocolo e um número da porta de uma URL.
Aviso
Ao usar System.Text.RegularExpressions para processar entradas não confiáveis, passe um tempo limite. Um usuário mal-intencionado pode fornecer entrada para RegularExpressions
, causando um ataque de negação de serviço. APIs ASP.NET Core Framework que usam RegularExpressions
passam um tempo limite.
Exemplo
O exemplo usa o método Match.Result para retornar o protocolo seguido por dois-pontos e pelo número da porta.
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(m.Result("${proto}${port}"));
}
}
// The example displays the following output:
// http:8080
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
Dim url As String = "http://www.contoso.com:8080/letters/readme.html"
Dim r As New Regex("^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
RegexOptions.None, TimeSpan.FromMilliseconds(150))
Dim m As Match = r.Match(url)
If m.Success Then
Console.WriteLine(m.Result("${proto}${port}"))
End If
End Sub
End Module
' The example displays the following output:
' http:8080
O padrão de expressão regular ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/
pode ser interpretado conforme mostrado na tabela a seguir.
Padrão | Descrição |
---|---|
^ |
Comece a correspondência no início da cadeia de caracteres. |
(?<proto>\w+) |
Fazer a correspondência a um ou mais caracteres de palavra. Nomeie esse grupo como proto . |
:// |
Fazer a correspondência de um sinal de dois-pontos seguido por duas barras "/". |
[^/]+? |
Fazer a correspondência de uma ou mais ocorrências (mas o menor número possível) de qualquer caractere que não seja uma barra "/". |
(?<port>:\d+)? |
Fazer a correspondência de zero ou uma ocorrência de um sinal de dois-pontos seguido por um ou mais caracteres de dígito. Nomeie esse grupo como port . |
/ |
Fazer a correspondência de uma barra "/". |
O método Match.Result expande a sequência de substituição ${proto}${port}
, que concatena o valor dos dois grupos nomeados capturados no padrão de expressão regular. Essa é uma alternativa conveniente para concatenar explicitamente as cadeias de caracteres recuperadas do objeto da coleção retornado pela propriedade Match.Groups.
O exemplo usa o método Match.Result com duas substituições, ${proto}
e ${port}
, para incluir os grupos capturados na cadeia de caracteres de saída. Você pode recuperar os grupos capturados do objeto GroupCollection da correspondência em vez disso, conforme mostra o código a seguir.
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de