FileSearchWindows/FileSearch/Logic/Model/CriterionSchemas/NameRegexCriterion.cs

59 lines
1.8 KiB
C#
Raw Normal View History

2025-05-12 06:55:09 +03:00
/*
* 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;
2024-10-05 10:06:04 +03:00
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);
}
}
}