//----------------------------------------------------------------------------- // // Copyright © 2016 Project Golan // // See "LICENSE" for more information. // //----------------------------------------------------------------------------- // // Link (URI) utilities. // //----------------------------------------------------------------------------- using System; using System.Text.RegularExpressions; namespace ProjectGolan.Vrobot3 { // // Utils // public static partial class Utils { // // URI // public struct URI { public String method, host, path, query, tag, uri; // // ToString // public override String ToString() => uri; // // Finder // public static Regex Finder = new Regex( @"((?[^:/?# ]+)?:)" + @"(//(?[^/?# ]*))" + @"(?[^?# ]*)" + @"(?\?([^# ]*))?" + @"(?#(.*))?"); // // FromMatch // public static URI FromMatch(Match match) { return new URI{ method = match.Groups["method"]?.Value ?? String.Empty, host = match.Groups["host"]?.Value, path = match.Groups["path"]?.Value, query = match.Groups["query"]?.Value ?? String.Empty, tag = match.Groups["tag"]?.Value ?? String.Empty, uri = match.Value }; } // // Match // public static URI Match(String str) => FromMatch(Finder.Match(str)); // // Matches // public static URI[] Matches(String str) { var matchbox = Finder.Matches(str); if(matchbox.Count == 0) return null; var matches = new URI[matchbox.Count]; for(var i = 0; i < matchbox.Count; i++) matches[i] = FromMatch(matchbox[i]); return matches; } } } } // EOF