/* Copyright (C) 2011-2015 de4dot@gmail.com This file is part of de4dot. de4dot is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. de4dot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with de4dot. If not, see . */ using System.Collections.Generic; using System.Text.RegularExpressions; namespace de4dot.code { public class NameRegex { Regex regex; public const char invertChar = '!'; public bool MatchValue { get; private set; } public NameRegex(string regex) { if (regex.Length > 0 && regex[0] == invertChar) { regex = regex.Substring(1); MatchValue = false; } else MatchValue = true; this.regex = new Regex(regex); } // Returns true if the regex matches. Use MatchValue to get result. public bool IsMatch(string s) { return regex.IsMatch(s); } public override string ToString() { if (!MatchValue) return invertChar + regex.ToString(); return regex.ToString(); } } public class NameRegexes { IList regexes; public bool DefaultValue { get; set; } public const char regexSeparatorChar = '&'; public IList Regexes { get { return regexes; } } public NameRegexes() : this("") { } public NameRegexes(string regex) { Set(regex); } public void Set(string regexesString) { regexes = new List(); if (regexesString != "") { foreach (var regex in regexesString.Split(new char[] { regexSeparatorChar })) regexes.Add(new NameRegex(regex)); } } public bool IsMatch(string s) { foreach (var regex in regexes) { if (regex.IsMatch(s)) return regex.MatchValue; } return DefaultValue; } public override string ToString() { var s = ""; for (int i = 0; i < regexes.Count; i++) { if (i > 0) s += regexSeparatorChar; s += regexes[i].ToString(); } return s; } } }