| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | namespace Caliburn.Micro.Core {    using System;    /// <summary>    ///  Helper class for encoding strings to regular expression patterns    /// </summary>    public static class RegExHelper {        /// <summary>        /// Regular expression pattern for valid name        /// </summary>        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}_]*";        /// <summary>        /// Regular expression pattern for subnamespace (including dot)        /// </summary>        public const string SubNamespaceRegEx = NameRegEx + @"\.";        /// <summary>        /// Regular expression pattern for namespace or namespace fragment        /// </summary>        public const string NamespaceRegEx = "(" + SubNamespaceRegEx + ")*";        /// <summary>        /// Creates a named capture group with the specified regular expression         /// </summary>        /// <param name="groupName">Name of capture group to create</param>        /// <param name="regEx">Regular expression pattern to capture</param>        /// <returns>Regular expression capture group with the specified group name</returns>        public static string GetCaptureGroup(string groupName, string regEx) {            return String.Concat(@"(?<", groupName, ">", regEx, ")");        }        /// <summary>        /// Converts a namespace (including wildcards) to a regular expression string        /// </summary>        /// <param name="srcNamespace">Source namespace to convert to regular expression</param>        /// <returns>Namespace converted to a regular expression</returns>        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;        }        /// <summary>        /// Creates a capture group for a valid name regular expression pattern        /// </summary>        /// <param name="groupName">Name of capture group to create</param>        /// <returns>Regular expression capture group with the specified group name</returns>        public static string GetNameCaptureGroup(string groupName) {            return GetCaptureGroup(groupName, NameRegEx);        }        /// <summary>        /// Creates a capture group for a namespace regular expression pattern        /// </summary>        /// <param name="groupName">Name of capture group to create</param>        /// <returns>Regular expression capture group with the specified group name</returns>        public static string GetNamespaceCaptureGroup(string groupName) {            return GetCaptureGroup(groupName, NamespaceRegEx);        }    }}
 |