/// <summary> /// 注册一个事件 /// </summary> /// <param name="eventName">事件名称</param> /// <param name="handler">事件句柄</param> /// <param name="life">在几次后事件会被自动释放</param> /// <returns>事件句柄</returns> public IEventHandler Listen(string eventName, Func <object, object> handler, int life = 0) { Guard.Requires <ArgumentNullException>(eventName != null); Guard.Requires <ArgumentNullException>(handler != null); eventName = Normalize(eventName); var wildcard = eventName.IndexOf("*") != -1; var eventHandler = new EventHandler(this, wildcard ? Str.AsteriskWildcard(eventName) : eventName, handler, life, wildcard); lock (syncRoot) { if (wildcard) { SetWildcardListener(eventHandler); } else { List <EventHandler> handlers; if (!this.handlers.TryGetValue(eventName, out handlers)) { this.handlers[eventName] = handlers = new List <EventHandler>(); } handlers.Add(eventHandler); } return(eventHandler); } }
public void TestStrIs() { Console.WriteLine(Str.AsteriskWildcard("path.?+/hello/w*d")); Assert.AreEqual(true, Str.Is("path.?+/hello/w*d", @"path.?+/hello/world")); Assert.AreEqual(false, Str.Is("path.?+/hello/w*d", @"hellopath.?+/hello/world")); Assert.AreEqual(true, Str.Is("path.?+/hello/w*d", @"path.?+/hello/worlddddddddd")); Assert.AreEqual(false, Str.Is("path.?+/hello/w*d", @"path.?+/hello/worldddddddddppppp")); }
public void TestAsteriskWildcard() { var input = "path.?+/hello/wor*d"; input = Str.AsteriskWildcard(input); Assert.AreEqual(@"path\.\?\+/hello/wor.*?d", input); }
public void TestAsteriskWildcard(string expected, string input, string message) { Assert.AreEqual(expected, Str.AsteriskWildcard(input), message); }
private static bool Is(string pattern, string value) { return(pattern == value || Regex.IsMatch(value, Str.AsteriskWildcard(pattern))); }
/// <summary> /// Build a regex pattern from a package name, expanding * globs as required. /// </summary> /// <param name="packageNamePattern">The package name pattern.</param> /// <param name="wrap">Wrap the cleaned string by the given string.</param> public static string PackageNameToRegexPattern(string packageNamePattern, string wrap = "(?i:^{0}$)") { return(string.Format(wrap, Str.AsteriskWildcard(packageNamePattern))); }