using System.Text; using System.Text.RegularExpressions; namespace MxGateway.Server.Galaxy; public static class GalaxyGlobMatcher { public static bool IsMatch(string value, string glob) { if (string.IsNullOrWhiteSpace(glob)) { return true; } return Regex.IsMatch( value ?? string.Empty, BuildRegex(glob), RegexOptions.CultureInvariant | RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(100)); } private static string BuildRegex(string glob) { StringBuilder builder = new("^", glob.Length + 2); foreach (char character in glob) { switch (character) { case '*': builder.Append(".*"); break; case '?': builder.Append('.'); break; default: builder.Append(Regex.Escape(character.ToString())); break; } } builder.Append('$'); return builder.ToString(); } }