Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В следующем примере выполняется извлечение протокола и номера порта из URL-адреса.
Предупреждение
При использовании System.Text.RegularExpressions для обработки ненадежных входных данных передайте время ожидания. Злоумышленник может предоставить входные данные RegularExpressions
, вызывая атаку типа "отказ в обслуживании". API платформы ASP.NET Core, использующие RegularExpressions
, передают время ожидания.
Пример
Этот пример использует метод Match.Result, чтобы вернуть имя протокола и номер порта, разделенные двоеточием.
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
Возможные интерпретации шаблона регулярного выражения ^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/
показаны в следующей таблице.
Расписание | Description |
---|---|
^ |
Соответствие должно обнаруживаться в начале строки. |
(?<proto>\w+) |
Совпадение с одним или несколькими символами слова. Присвойте этой группе имя proto . |
:// |
Совпадение с двоеточием, за которым следуют две косые черты. |
[^/]+? |
Совпадение с одним или несколькими вхождениями (но как можно меньшему числу) любого символа, отличного от косой черты. |
(?<port>:\d+)? |
Совпадение с вхождениями в количестве 0 или 1 двоеточия, за которым следует одна или несколько цифр. Присвойте этой группе имя port . |
/ |
Совпадение с косой чертой. |
Метод Match.Result разворачивает последовательность замены ${proto}${port}
, которая объединяет захваченное значение из двух именованных групп в шаблоне регулярного выражения. Это удобная альтернатива явному объединению строк, извлеченных из объекта коллекции, который был возвращен свойством Match.Groups.
В примере используется метод Match.Result с двумя подстановками ${proto}
и ${port}
для включения захваченных групп в выходную строку. Вместо этого вы можете извлечь захваченные группы из объекта GroupCollection в сопоставлении, как показано в следующем примере кода.
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)