-4

これを正規表現したい: "localhost:65536".

これらは可能な値/ルールです: 文字列の後に":"1 から 65536 までの整数が続きます。

これどうやってするの?

4

2 に答える 2

3

なぜこれに正規表現が必要なのですか? これは、通常の文字列操作オプションを使用して簡単に実現できます。

通常の文字列オプション

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;
    }
};
于 2012-10-10T08:27:30.167 に答える
0

この単純な正規表現を試すことができます

^[a-zA-Z0-9\.\-]+:[0-9]{1,5}

また、正規表現を試すには、たとえば、この無料の正規表現テスターを使用できます。

于 2012-10-10T08:26:33.007 に答える