public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition) { if (this._regex.IsMatch(new string(currentStringCharacter, 1))) { base.ProcessStringCharacter(currentStringCharacter, currentPatternPosition, patternPositionsForCurrentStringPosition, patternPositionsForNextStringPosition); } }
/// <summary> /// Instantiate internal regex member if not already done. /// </summary> /// <returns>True on success, false otherwise.</returns> private void Init() { StringComparison GetStringComparison() { StringComparison stringComparison; if (Options.HasFlag(WildcardOptions.IgnoreCase)) { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCultureIgnoreCase : CultureInfo.CurrentCulture.Name.Equals("en-US-POSIX", StringComparison.OrdinalIgnoreCase) // The collation behavior of the POSIX locale (also known as the C locale) is case sensitive. // For this specific locale, we use 'OrdinalIgnoreCase'. ? StringComparison.OrdinalIgnoreCase : StringComparison.CurrentCultureIgnoreCase; } else { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCulture : StringComparison.CurrentCulture; } return(stringComparison); } if (_isMatch != null) { return; } if (Pattern.Length == 1 && Pattern[0] == '*') { _isMatch = s_matchAll; return; } int index = Pattern.IndexOfAny(s_specialChars); if (index == -1) { // No special characters present in the pattern, so we can just do a string comparison. _isMatch = str => string.Equals(str, Pattern, GetStringComparison()); return; } if (index == Pattern.Length - 1 && Pattern[index] == '*') { // No special characters present in the pattern before last position and last character is asterisk. var patternWithoutAsterisk = Pattern.AsMemory().Slice(0, index); _isMatch = str => str.AsSpan().StartsWith(patternWithoutAsterisk.Span, GetStringComparison()); return; } var matcher = new WildcardPatternMatcher(this); _isMatch = matcher.IsMatch; }
/// <summary> /// Instantiate internal regex member if not already done. /// </summary> /// <returns>True on success, false otherwise.</returns> private void Init() { StringComparison GetStringComparison() { StringComparison stringComparison; if (Options.HasFlag(WildcardOptions.IgnoreCase)) { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.CurrentCultureIgnoreCase; } else { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCulture : StringComparison.CurrentCulture; } return(stringComparison); } if (_isMatch != null) { return; } if (Pattern.Length == 1 && Pattern[0] == '*') { _isMatch = s_matchAll; return; } int index = Pattern.IndexOfAny(s_specialChars); if (index == -1) { // No special characters present in the pattern, so we can just do a string comparison. _isMatch = str => string.Equals(str, Pattern, GetStringComparison()); return; } if (index == Pattern.Length - 1 && Pattern[index] == '*') { // No special characters present in the pattern before last position and last character is asterisk. var patternWithoutAsterisk = Pattern.AsMemory().Slice(0, index); _isMatch = str => str.AsSpan().StartsWith(patternWithoutAsterisk.Span, GetStringComparison()); return; } var matcher = new WildcardPatternMatcher(this); _isMatch = matcher.IsMatch; }
/// <summary> /// Instantiate internal regex member if not already done. /// </summary> /// /// <returns> true on success, false otherwise </returns> /// /// <remarks> </remarks> /// private void Init() { if (_isMatch == null) { if (Pattern.Length == 1 && Pattern[0] == '*') { _isMatch = _ => true; } else { var matcher = new WildcardPatternMatcher(this); _isMatch = matcher.IsMatch; } } }
private bool Init() { if (this._isMatch == null) { if (false) { Regex regex = WildcardPatternToRegexParser.Parse(this); this._isMatch = new Predicate <string>(regex.IsMatch); } else { WildcardPatternMatcher matcher = new WildcardPatternMatcher(this); this._isMatch = new Predicate <string>(matcher.IsMatch); } } return(this._isMatch != null); }
/// <summary> /// Instantiate internal regex member if not already done. /// </summary> /// <returns>True on success, false otherwise.</returns> private void Init() { if (_isMatch != null) { return; } if (Pattern.Length == 1 && Pattern[0] == '*') { _isMatch = s_matchAll; return; } if (Pattern.IndexOfAny(s_specialChars) == -1) { // No special characters present in the pattern, so we can just do a string comparison. StringComparison stringComparison; if (Options.HasFlag(WildcardOptions.IgnoreCase)) { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCultureIgnoreCase : StringComparison.CurrentCultureIgnoreCase; } else { stringComparison = Options.HasFlag(WildcardOptions.CultureInvariant) ? StringComparison.InvariantCulture : StringComparison.CurrentCulture; } _isMatch = str => string.Equals(str, Pattern, stringComparison); return; } var matcher = new WildcardPatternMatcher(this); _isMatch = matcher.IsMatch; }
private bool Init() { if (this._isMatch == null) { if (false) { Regex regex = WildcardPatternToRegexParser.Parse(this); this._isMatch = new Predicate<string>(regex.IsMatch); } else { WildcardPatternMatcher matcher = new WildcardPatternMatcher(this); this._isMatch = new Predicate<string>(matcher.IsMatch); } } return (this._isMatch != null); }
/// <summary> /// Instantiate internal regex member if not already done. /// </summary> /// /// <returns> true on success, false otherwise </returns> /// /// <remarks> </remarks> /// private void Init() { if (_isMatch == null) { if (Pattern.Length == 1 && Pattern[0] == '*') { _isMatch = _ => true; } else { var matcher = new WildcardPatternMatcher(this); _isMatch = matcher.IsMatch; } } }
public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition) { patternPositionsForCurrentStringPosition.Add(currentPatternPosition + 1); patternPositionsForNextStringPosition.Add(currentPatternPosition); }
public override void ProcessEndOfString(int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForEndOfStringPosition) { patternPositionsForEndOfStringPosition.Add(currentPatternPosition + 1); }
public abstract void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition);
public abstract void ProcessEndOfString(int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForEndOfStringPosition);
public static WildcardPatternMatcher.PatternElement[] Parse(WildcardPattern pattern, WildcardPatternMatcher.CharacterNormalizer characterNormalizer) { WildcardPatternMatcher.MyWildcardPatternParser parser = new WildcardPatternMatcher.MyWildcardPatternParser { _characterNormalizer = characterNormalizer, _regexOptions = WildcardPatternToRegexParser.TranslateWildcardOptionsIntoRegexOptions(pattern.Options) }; WildcardPatternParser.Parse(pattern, parser); return parser._patternElements.ToArray(); }
public override void ProcessStringCharacter(char currentStringCharacter, int currentPatternPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForCurrentStringPosition, WildcardPatternMatcher.PatternPositionsVisitor patternPositionsForNextStringPosition) { if (this._literalCharacter == currentStringCharacter) { base.ProcessStringCharacter(currentStringCharacter, currentPatternPosition, patternPositionsForCurrentStringPosition, patternPositionsForNextStringPosition); } }