/* * Author: Nikolay Dvurechensky * Site: https://www.dvurechensky.pro/ * Gmail: dvurechenskysoft@gmail.com * Last Updated: 12 мая 2025 06:51:53 * Version: 1.0.7 */ using FileSearch.Logic.Model.Engine; using System.Text.RegularExpressions; namespace FileSearch.Logic.Model.CriterionSchemas { internal class NameRegexCriterion : CriterionBase, ICriterion { private readonly string _regularExpression; private readonly bool _ignoreCase; private readonly bool _matchFullPath; private Regex _cachedRegex; public NameRegexCriterion(string regularExpression, bool ignoreCase, bool matchFullPath) { if (regularExpression == null) throw new ArgumentNullException("regularExpression"); _regularExpression = regularExpression; _ignoreCase = ignoreCase; _matchFullPath = matchFullPath; } public string Name { get { return "File and directory names using regular expressions"; } } public CriterionWeight Weight { get { return CriterionWeight.None; } } public bool DirectorySupport { get { return true; } } public bool FileSupport { get { return true; } } public bool IsMatch(FileSystemInfo fileSystemInfo, ICriterionContext context) { return IsMatch(_matchFullPath ? fileSystemInfo.FullName : fileSystemInfo.Name); } protected virtual bool IsMatch(string fileName) { if (_cachedRegex == null) _cachedRegex = new Regex(_regularExpression, RegexOptions.Compiled | (_ignoreCase ? RegexOptions.IgnoreCase : RegexOptions.None)); return _cachedRegex.IsMatch(fileName); } } }