Porady: wyodrębnianie protokółu i numeru portu z adresu URL
Poniższy przykład wyodrębnia protokół i numer portu z adresu URL.
Ostrzeżenie
W przypadku używania System.Text.RegularExpressions metody do przetwarzania niezaufanych danych wejściowych należy przekazać limit czasu. Złośliwy użytkownik może przekazać dane wejściowe , RegularExpressions
powodując atak typu "odmowa usługi". ASP.NET podstawowe interfejsy API platformy, które używają RegularExpressions
przekroczenia limitu czasu.
Przykład
W przykładzie użyto Match.Result metody , aby zwrócić protokół, po którym następuje dwukropek, po którym następuje numer portu.
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
Wzorzec ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/
wyrażenia regularnego można interpretować, jak pokazano w poniższej tabeli.
Wzorzec | opis |
---|---|
^ |
Rozpocznij dopasowanie na początku ciągu. |
(?<proto>\w+) |
Dopasowuje co najmniej jeden znak słowa. Nadaj tej grupie proto nazwę . |
:// |
Dopasuj dwukropek, a następnie dwa znaki ukośnika. |
[^/]+? |
Dopasuj co najmniej jedno wystąpienie (ale jak najmniej) dowolnego znaku innego niż znak ukośnika. |
(?<port>:\d+)? |
Dopasuj zero lub jedno wystąpienie dwukropka, po którym następuje co najmniej jeden znak cyfry. Nadaj tej grupie port nazwę . |
/ |
Dopasuj znak ukośnika. |
Metoda Match.Result rozszerza ${proto}${port}
sekwencję zastępczą, która łączy wartość dwóch nazwanych grup przechwyconych we wzorcu wyrażenia regularnego. Jest to wygodna alternatywa dla jawnego łączenia ciągów pobranych z obiektu kolekcji zwróconego Match.Groups przez właściwość .
W przykładzie użyto Match.Result metody z dwoma podstawieniami i ${proto}
${port}
, aby uwzględnić przechwycone grupy w ciągu wyjściowym. Zamiast tego można pobrać przechwycone grupy z obiektu match, GroupCollection jak pokazano w poniższym kodzie.
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla