diff options
Diffstat (limited to 'src/main.lib/Extensions/StringExtensions.cs')
-rw-r--r-- | src/main.lib/Extensions/StringExtensions.cs | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/main.lib/Extensions/StringExtensions.cs b/src/main.lib/Extensions/StringExtensions.cs index 9740b3b..b9b9a84 100644 --- a/src/main.lib/Extensions/StringExtensions.cs +++ b/src/main.lib/Extensions/StringExtensions.cs @@ -112,10 +112,44 @@ namespace PKISharp.WACS.Extensions } } + /// <summary> + /// + /// </summary> + /// <param name="pattern"></param> + /// <returns></returns> public static string PatternToRegex(this string pattern) { + pattern = pattern.Replace("\\\\", SlashEscape); + pattern = pattern.Replace("\\,", CommaEscape); + pattern = pattern.Replace("\\*", StarEscape); + pattern = pattern.Replace("\\?", QuestionEscape); var parts = pattern.ParseCsv(); - return $"^({string.Join('|', parts.Select(x => Regex.Escape(x).Replace(@"\*", ".*").Replace(@"\?", ".")))})$"; + return $"^({string.Join('|', parts.Select(x => Regex.Escape(x).PatternToRegexPart()))})$"; + } + + private const string SlashEscape = "~slash~"; + private const string CommaEscape = "~comma~"; + private const string StarEscape = "~star~"; + private const string QuestionEscape = "~question~"; + + public static string EscapePattern(this string pattern) + { + return pattern. + Replace("\\", "\\\\"). + Replace(",", "\\,"). + Replace("*", "\\*"). + Replace("?", "\\?"); + } + + private static string PatternToRegexPart(this string pattern) + { + return pattern. + Replace("\\*", ".*"). + Replace("\\?", "."). + Replace(SlashEscape, "\\\\"). + Replace(CommaEscape, ","). + Replace(StarEscape, "\\*"). + Replace(QuestionEscape, "\\?"); } |