Dela via


Gör så här: Extrahera ett protokoll och portnummer från en URL

I följande exempel extraheras ett protokoll och ett portnummer från en URL.

Varning

När du använder System.Text.RegularExpressions för att bearbeta ej betrodda indata skickar du en timeout. En obehörig användare kan ange indata till RegularExpressions, vilket orsakar en Denial-of-Service-attack. ASP.NET Core Framework-API:er som använder RegularExpressions passera en timeout.

Exempel

I exemplet används Match.Result metoden för att returnera protokollet följt av ett kolon följt av portnumret.

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

Mönster för ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ reguljära uttryck kan tolkas enligt följande tabell.

Mönster beskrivning
^ Börja matchningen i början av strängen.
(?<proto>\w+) Matcha ett eller flera ordtecken. Ge den här gruppen protonamnet .
:// Matcha ett kolon följt av två snedstreck.
[^/]+? Matcha en eller flera förekomster (men så få som möjligt) av andra tecken än ett snedstreck.
(?<port>:\d+)? Matcha noll eller en förekomst av ett kolon följt av ett eller flera tecken. Ge den här gruppen portnamnet .
/ Matcha ett snedstreck.

Metoden Match.Result expanderar ersättningssekvensen ${proto}${port} , vilket sammanfogar värdet för de två namngivna grupperna som avbildas i mönstret för reguljära uttryck. Det är ett praktiskt alternativ till att explicit sammanfoga strängarna som hämtats från samlingsobjektet som returneras av Match.Groups egenskapen.

I exemplet används Match.Result metoden med två ersättningar, ${proto} och ${port}, för att inkludera de insamlade grupperna i utdatasträngen. Du kan hämta de insamlade grupperna från matchningens GroupCollection objekt i stället, som följande kod visar.

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

Se även