Procedura: estrarre un protocollo e un numero di porta da un URL
Nell'esempio seguente vengono estratti un protocollo e un numero di porta da un URL.
Esempio
Nell'esempio viene utilizzato il metodo Match.Result per restituire il protocollo seguito da due punti seguiti dal numero di 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
Il modello di espressione regolare ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/ può essere interpretato come illustrato nella tabella seguente.
Modello |
Descrizione |
---|---|
^ |
Iniziare la ricerca della corrispondenza all'inizio della stringa. |
(?<proto>\w+) |
Trova la corrispondenza di uno o più caratteri alfanumerici. Assegnare al gruppo il nome proto. |
:// |
Trovare la corrispondenza di due punti seguiti da due barre. |
[^/]+? |
Trovare la corrispondenza di una o più occorrenze (ma il minor numero possibile) di qualsiasi carattere diverso da una barra. |
(?<port>:\d+)? |
Trovare la corrispondenza di zero o una occorrenza di due punti seguiti da una o più cifre. Assegnare al gruppo il nome port. |
/ |
Trovare la corrispondenza di una barra. |
Il metodo Match.Result espande la sequenza di sostituzione ${proto}${port} che concatena il valore dei due gruppi denominati acquisiti nel modello di espressione regolare. Si tratta di una comoda alternativa alla concatenazione esplicita delle stringhe recuperate dall'oggetto Collection restituito dalla proprietà Match.Groups.
Nell'esempio viene utilizzato il metodo Match.Result con due sostituzioni, ${proto} e ${port}, per includere i gruppi acquisiti nella stringa di output. È possibile invece recuperare i gruppi acquisiti dall'oggetto GroupCollection della corrispondenza, come viene illustrato dal codice seguente.
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);