方法 : URL からプロトコルとポート番号を抽出する
次の例では、URL からプロトコルとポート番号を抽出します。
警告
System.Text.RegularExpressions を使用して信頼できない入力を処理するときは、タイムアウトを渡します。 悪意のあるユーザーが RegularExpressions
に入力を提供して、サービス拒否攻撃を行う可能性があります。 RegularExpressions
を使用する ASP.NET Core フレームワーク API は、タイムアウトを渡します。
例
例では 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+)?/
の解釈を次の表に示します。
Pattern | 説明 |
---|---|
^ |
文字列の先頭から照合を開始します。 |
(?<proto>\w+) |
1 つ以上の単語文字に一致します。 このグループに proto と名前を付けます。 |
:// |
後に 2 つのスラッシュ記号が続くコロンと一致します。 |
[^/]+? |
スラッシュ記号以外の任意の文字の 1 回以上の (ただし、可能な限り少ない) 出現と一致します。 |
(?<port>:\d+)? |
後に 1 桁以上の文字が続くコロンの 0 回または 1 回の出現と一致します。 このグループに port と名前を付けます。 |
/ |
スラッシュ記号に一致します。 |
Match.Result メソッドは、正規表現パターンでキャプチャされた 2 つの名前付きグループの値を連結する、${proto}${port}
置換シーケンスを展開します。 これは、Match.Groups プロパティによって返されたコレクション オブジェクトから取得した文字列を明示的に連結するための便利な代替です。
例では、Match.Result メソッドを 2 つの置換 ${proto}
と ${port}
とともに使用して、キャプチャされたグループを出力文字列に含めます。 代わりに、次のコードに示されているように、一致の GroupCollection オブジェクトから、キャプチャされたグループを取得することができます。
Console.WriteLine(m.Groups["proto"].Value + m.Groups["port"].Value);
Console.WriteLine(m.Groups("proto").Value + m.Groups("port").Value)
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示