FileSearchWindows/FileSearch/Logic/Model/CriterionSchemas/NameRegexCriterion.cs
Dvurechensky 2edf663d5b 1.0.5
2025-05-12 06:55:09 +03:00

59 lines
1.8 KiB
C#

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