以下を検証してグループ化するための正規表現を作成するのに問題があります。
- c1dev01->有効
- c1dev01:25->有効
- 192.168.2.3->有効
- 192.168.2.3:189->有効
- c1dev01:->有効
- c1dev01:aa->無効
正しい範囲の検証は、正規表現ではなく、別のステップで行うのが最適だと思います。ただし、正規表現は、文字列形式を検証し、ポート番号を一度に抽出するのに最適です。フォーマットの場合、最大で1つのコロンと、その右側の数字のみ(最大で5)が必要です。これは、次のパターン文字列に対応します。
@"^([^:]+)(?:[:](\d{0,5}))?$"
ここで、^と$は、パターンを文字列の最初と最後に固定します。Regex.Match()でこのパターンを使用する場合、match.Groups [1] .Valueでホスト名を検索し、match.Groups [2] .Valueでポート番号を検索して、65535以下であることを確認できます。
もちろん、ホストに許可される文字をさらに制限することもできます。
^(?(\d{1,3}。\d{1,3}。\d{1,3}。\d{1,3})|(\ w +))(:(?\ d {0 、5}))* $
ホスト/IPの使用match.Group["host"]
を取得し、ポートの使用を取得するにはmatch.Group["posrt"]
。