Delen via


Procedure: Een protocol en poortnummer extraheren uit een URL

In het volgende voorbeeld worden een protocol en poortnummer uit een URL geëxtraheerd.

Waarschuwing

Wanneer u System.Text.RegularExpressions niet-vertrouwde invoer gebruikt, geeft u een time-out door. Een kwaadwillende gebruiker kan invoer opgeven voor RegularExpressionseen Denial-of-Service-aanval. ASP.NET Core Framework-API's die gebruikmaken van RegularExpressions een time-out.

Opmerking

In het voorbeeld wordt de Match.Result methode gebruikt om het protocol te retourneren, gevolgd door een dubbele punt gevolgd door het poortnummer.

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

Het reguliere expressiepatroon ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ kan worden geïnterpreteerd zoals wordt weergegeven in de volgende tabel.

Patroon Beschrijving
^ Begin de overeenkomst aan het begin van de tekenreeks.
(?<proto>\w+) Komt overeen met een of meer woordtekens. Geef deze groep protoeen naam.
:// Kom overeen met een dubbele punt gevolgd door twee slashmarkeringen.
[^/]+? Komen overeen met een of meer exemplaren (maar zo weinig mogelijk) van een ander teken dan een slashmarkering.
(?<port>:\d+)? Kom overeen met nul of één exemplaar van een dubbele punt, gevolgd door een of meer cijfertekens. Geef deze groep porteen naam.
/ Overeenkomst met een schuine streep.

De Match.Result methode breidt de ${proto}${port} vervangingsreeks uit, waarmee de waarde van de twee benoemde groepen wordt samengevoegd die zijn vastgelegd in het reguliere expressiepatroon. Het is een handig alternatief om de tekenreeksen die zijn opgehaald uit het verzamelingsobject dat door de Match.Groups eigenschap wordt geretourneerd, expliciet samen te voegen.

In het voorbeeld wordt de Match.Result methode met twee vervangingen ${proto} gebruikt en ${port}worden de vastgelegde groepen opgenomen in de uitvoertekenreeks. U kunt in plaats daarvan de vastgelegde groepen ophalen uit het object van GroupCollection de overeenkomst, zoals in de volgende code wordt weergegeven.

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

Zie ook