namespace Caliburn.Micro.Core { using System; /// /// Helper class for encoding strings to regular expression patterns /// public static class RegExHelper { /// /// Regular expression pattern for valid name /// public const string NameRegEx = @"[\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}_][\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Cf}_]*"; /// /// Regular expression pattern for subnamespace (including dot) /// public const string SubNamespaceRegEx = NameRegEx + @"\."; /// /// Regular expression pattern for namespace or namespace fragment /// public const string NamespaceRegEx = "(" + SubNamespaceRegEx + ")*"; /// /// Creates a named capture group with the specified regular expression /// /// Name of capture group to create /// Regular expression pattern to capture /// Regular expression capture group with the specified group name public static string GetCaptureGroup(string groupName, string regEx) { return String.Concat(@"(?<", groupName, ">", regEx, ")"); } /// /// Converts a namespace (including wildcards) to a regular expression string /// /// Source namespace to convert to regular expression /// Namespace converted to a regular expression public static string NamespaceToRegEx(string srcNamespace) { //Need to escape the "." as it's a special character in regular expression syntax var nsencoded = srcNamespace.Replace(".", @"\."); //Replace "*" wildcard with regular expression syntax nsencoded = nsencoded.Replace(@"*\.", NamespaceRegEx); return nsencoded; } /// /// Creates a capture group for a valid name regular expression pattern /// /// Name of capture group to create /// Regular expression capture group with the specified group name public static string GetNameCaptureGroup(string groupName) { return GetCaptureGroup(groupName, NameRegEx); } /// /// Creates a capture group for a namespace regular expression pattern /// /// Name of capture group to create /// Regular expression capture group with the specified group name public static string GetNamespaceCaptureGroup(string groupName) { return GetCaptureGroup(groupName, NamespaceRegEx); } } }