RegExHelper.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. namespace Caliburn.Micro.Core {
  2. using System;
  3. /// <summary>
  4. /// Helper class for encoding strings to regular expression patterns
  5. /// </summary>
  6. public static class RegExHelper {
  7. /// <summary>
  8. /// Regular expression pattern for valid name
  9. /// </summary>
  10. 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}_]*";
  11. /// <summary>
  12. /// Regular expression pattern for subnamespace (including dot)
  13. /// </summary>
  14. public const string SubNamespaceRegEx = NameRegEx + @"\.";
  15. /// <summary>
  16. /// Regular expression pattern for namespace or namespace fragment
  17. /// </summary>
  18. public const string NamespaceRegEx = "(" + SubNamespaceRegEx + ")*";
  19. /// <summary>
  20. /// Creates a named capture group with the specified regular expression
  21. /// </summary>
  22. /// <param name="groupName">Name of capture group to create</param>
  23. /// <param name="regEx">Regular expression pattern to capture</param>
  24. /// <returns>Regular expression capture group with the specified group name</returns>
  25. public static string GetCaptureGroup(string groupName, string regEx) {
  26. return String.Concat(@"(?<", groupName, ">", regEx, ")");
  27. }
  28. /// <summary>
  29. /// Converts a namespace (including wildcards) to a regular expression string
  30. /// </summary>
  31. /// <param name="srcNamespace">Source namespace to convert to regular expression</param>
  32. /// <returns>Namespace converted to a regular expression</returns>
  33. public static string NamespaceToRegEx(string srcNamespace) {
  34. //Need to escape the "." as it's a special character in regular expression syntax
  35. var nsencoded = srcNamespace.Replace(".", @"\.");
  36. //Replace "*" wildcard with regular expression syntax
  37. nsencoded = nsencoded.Replace(@"*\.", NamespaceRegEx);
  38. return nsencoded;
  39. }
  40. /// <summary>
  41. /// Creates a capture group for a valid name regular expression pattern
  42. /// </summary>
  43. /// <param name="groupName">Name of capture group to create</param>
  44. /// <returns>Regular expression capture group with the specified group name</returns>
  45. public static string GetNameCaptureGroup(string groupName) {
  46. return GetCaptureGroup(groupName, NameRegEx);
  47. }
  48. /// <summary>
  49. /// Creates a capture group for a namespace regular expression pattern
  50. /// </summary>
  51. /// <param name="groupName">Name of capture group to create</param>
  52. /// <returns>Regular expression capture group with the specified group name</returns>
  53. public static string GetNamespaceCaptureGroup(string groupName) {
  54. return GetCaptureGroup(groupName, NamespaceRegEx);
  55. }
  56. }
  57. }