| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | using System;using System.Text.RegularExpressions;namespace Emby.Naming.Common{    /// <summary>    /// Regular expressions for parsing TV Episodes.    /// </summary>    public class EpisodeExpression    {        private string _expression;        private Regex? _regex;        /// <summary>        /// Initializes a new instance of the <see cref="EpisodeExpression"/> class.        /// </summary>        /// <param name="expression">Regular expressions.</param>        /// <param name="byDate">True if date is expected.</param>        public EpisodeExpression(string expression, bool byDate = false)        {            _expression = expression;            IsByDate = byDate;            DateTimeFormats = Array.Empty<string>();            SupportsAbsoluteEpisodeNumbers = true;        }        /// <summary>        /// Gets or sets raw expressions string.        /// </summary>        public string Expression        {            get => _expression;            set            {                _expression = value;                _regex = null;            }        }        /// <summary>        /// Gets or sets a value indicating whether gets or sets property indicating if date can be find in expression.        /// </summary>        public bool IsByDate { get; set; }        /// <summary>        /// Gets or sets a value indicating whether gets or sets property indicating if expression is optimistic.        /// </summary>        public bool IsOptimistic { get; set; }        /// <summary>        /// Gets or sets a value indicating whether gets or sets property indicating if expression is named.        /// </summary>        public bool IsNamed { get; set; }        /// <summary>        /// Gets or sets a value indicating whether gets or sets property indicating if expression supports episodes with absolute numbers.        /// </summary>        public bool SupportsAbsoluteEpisodeNumbers { get; set; }        /// <summary>        /// Gets or sets optional list of date formats used for date parsing.        /// </summary>        public string[] DateTimeFormats { get; set; }        /// <summary>        /// Gets a <see cref="Regex"/> expressions objects (creates it if null).        /// </summary>        public Regex Regex => _regex ??= new Regex(Expression, RegexOptions.IgnoreCase | RegexOptions.Compiled);    }}
 |