これを正規表現したい: "localhost:65536"
.
これらは可能な値/ルールです: 文字列の後に":"
1 から 65536 までの整数が続きます。
これどうやってするの?
なぜこれに正規表現が必要なのですか? これは、通常の文字列操作オプションを使用して簡単に実現できます。
public struct ConnectionData
{
public string Host;
public ushort Port;
public static bool TryParse(string connectionString, out ConnectionData data)
{
data = default(ConnectionData);
try { data = Parse(connectionString); return true; }
catch (FormatException) { return false; }
}
public static ConnectionData Parse(string connectionString)
{
var data = new ConnectionData();
var parts = connectionString.Split(new char[] { ':' }, 2);
if (parts.Length != 2 || !ushort.TryParse(parts[1], out data.Port))
throw new FormatException("Provided connectionString was not in the correct format of 'host:port'");
data.Host = parts[0];
return data;
}
};
本当に正規表現を使用する必要がある場合:
public struct ConnectionData
{
public string Host;
public ushort Port;
private static Regex FORMAT = new Regex(@"^(?<host>[\w.-]+):(?<port>\d{1,5})$", RegexOptions.Compiled);
public static bool TryParse(string connectionString, out ConnectionData data)
{
data = default(ConnectionData);
try { data = Parse(connectionString); return true; }
catch (FormatException) { return false; }
}
public static ConnectionData Parse(string connectionString)
{
var data = new ConnectionData();
var match = FORMAT.Match(connectionString);
if (!match.Success || !ushort.TryParse(match.Groups["port"].Value, out data.Port))
throw new FormatException("Provided connectionString was not in the correct format of 'host:port'");
data.Host = match.Groups["host"].Value;
return data;
}
};