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);
}
}
}