9 instantiations of RegexCharClass
System.Text.RegularExpressions.Generator (9)
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexCharClass.cs (1)
1475var level = new RegexCharClass(IsNegated(charClass, pos), ranges, categoriesBuilder, subtraction: null);
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNode.cs (1)
1192prevCharClass = new RegexCharClass();
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexParser.cs (4)
585RegexCharClass? charClass = scanOnly ? null : new RegexCharClass(); 759charClass = new RegexCharClass(); 790charClass = new RegexCharClass(); 1206var cc = new RegexCharClass();
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (3)
957cc ??= new RegexCharClass(); 966cc ??= new RegexCharClass(); 1003cc ??= new RegexCharClass();
315 references to RegexCharClass
System.Text.RegularExpressions.Generator (315)
RegexGenerator.Emitter.cs (145)
641if (!RegexCharClass.CharInClass((char)i, set)) 650RegexCharClass.DigitClass => "IndexOfAnyDigit", 651RegexCharClass.ControlClass => "IndexOfAnyControl", 652RegexCharClass.LetterClass => "IndexOfAnyLetter", 653RegexCharClass.LetterOrDigitClass => "IndexOfAnyLetterOrDigit", 654RegexCharClass.LowerClass => "IndexOfAnyLower", 655RegexCharClass.NumberClass => "IndexOfAnyNumber", 656RegexCharClass.PunctuationClass => "IndexOfAnyPunctuation", 657RegexCharClass.SeparatorClass => "IndexOfAnySeparator", 658RegexCharClass.SpaceClass => "IndexOfAnyWhiteSpace", 659RegexCharClass.SymbolClass => "IndexOfAnySymbol", 660RegexCharClass.UpperClass => "IndexOfAnyUpper", 661RegexCharClass.WordClass => "IndexOfAnyWordChar", 663RegexCharClass.NotDigitClass => "IndexOfAnyExceptDigit", 664RegexCharClass.NotControlClass => "IndexOfAnyExceptControl", 665RegexCharClass.NotLetterClass => "IndexOfAnyExceptLetter", 666RegexCharClass.NotLetterOrDigitClass => "IndexOfAnyExceptLetterOrDigit", 667RegexCharClass.NotLowerClass => "IndexOfAnyExceptLower", 668RegexCharClass.NotNumberClass => "IndexOfAnyExceptNumber", 669RegexCharClass.NotPunctuationClass => "IndexOfAnyExceptPunctuation", 670RegexCharClass.NotSeparatorClass => "IndexOfAnyExceptSeparator", 671RegexCharClass.NotSpaceClass => "IndexOfAnyExceptWhiteSpace", 672RegexCharClass.NotSymbolClass => "IndexOfAnyExceptSymbol", 673RegexCharClass.NotUpperClass => "IndexOfAnyExceptUpper", 674RegexCharClass.NotWordClass => "IndexOfAnyExceptWordChar", 683if (RegexCharClass.TryGetOnlyCategories(set, categories, out int numCategories, out bool negatedCategory)) 1297primarySet.Set != RegexCharClass.NotNewLineClass && 1298primarySet.Set != RegexCharClass.AnyClass; 1363else if (RegexCharClass.IsUnicodeCategoryOfSmallCharCount(primarySet.Set, out char[]? setChars, out bool negated, out string? description)) 1896int numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars); 3748node.Str == RegexCharClass.AnyClass && 4163else if (node.IsSetFamily && node.Str == RegexCharClass.AnyClass) 4278if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 4301else if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 5088bool negated = RegexCharClass.IsNegated(node.Str) ^ negate; 5092if (RegexCharClass.TryGetSingleRange(node.Str, out char lowInclusive, out char highInclusive) && 5107setChars = setChars.Slice(0, RegexCharClass.GetSetChars(node.Str, setChars)); 5146case RegexCharClass.AnyClass: 5149case RegexCharClass.DigitClass: 5150case RegexCharClass.NotDigitClass: 5151negate ^= charClass == RegexCharClass.NotDigitClass; 5154case RegexCharClass.SpaceClass: 5155case RegexCharClass.NotSpaceClass: 5156negate ^= charClass == RegexCharClass.NotSpaceClass; 5159case RegexCharClass.WordClass: 5160case RegexCharClass.NotWordClass: 5162negate ^= charClass == RegexCharClass.NotWordClass; 5165case RegexCharClass.ControlClass: 5166case RegexCharClass.NotControlClass: 5167negate ^= charClass == RegexCharClass.NotControlClass; 5170case RegexCharClass.LetterClass: 5171case RegexCharClass.NotLetterClass: 5172negate ^= charClass == RegexCharClass.NotLetterClass; 5175case RegexCharClass.LetterOrDigitClass: 5176case RegexCharClass.NotLetterOrDigitClass: 5177negate ^= charClass == RegexCharClass.NotLetterOrDigitClass; 5180case RegexCharClass.LowerClass: 5181case RegexCharClass.NotLowerClass: 5182negate ^= charClass == RegexCharClass.NotLowerClass; 5185case RegexCharClass.UpperClass: 5186case RegexCharClass.NotUpperClass: 5187negate ^= charClass == RegexCharClass.NotUpperClass; 5190case RegexCharClass.NumberClass: 5191case RegexCharClass.NotNumberClass: 5192negate ^= charClass == RegexCharClass.NotNumberClass; 5195case RegexCharClass.PunctuationClass: 5196case RegexCharClass.NotPunctuationClass: 5197negate ^= charClass == RegexCharClass.NotPunctuationClass; 5200case RegexCharClass.SeparatorClass: 5201case RegexCharClass.NotSeparatorClass: 5202negate ^= charClass == RegexCharClass.NotSeparatorClass; 5205case RegexCharClass.SymbolClass: 5206case RegexCharClass.NotSymbolClass: 5207negate ^= charClass == RegexCharClass.NotSymbolClass; 5210case RegexCharClass.AsciiLetterClass: 5211case RegexCharClass.NotAsciiLetterClass: 5212negate ^= charClass == RegexCharClass.NotAsciiLetterClass; 5215case RegexCharClass.AsciiLetterOrDigitClass: 5216case RegexCharClass.NotAsciiLetterOrDigitClass: 5217negate ^= charClass == RegexCharClass.NotAsciiLetterOrDigitClass; 5220case RegexCharClass.HexDigitClass: 5221case RegexCharClass.NotHexDigitClass: 5222negate ^= charClass == RegexCharClass.NotHexDigitClass; 5225case RegexCharClass.HexDigitLowerClass: 5226case RegexCharClass.NotHexDigitLowerClass: 5227negate ^= charClass == RegexCharClass.NotHexDigitLowerClass; 5230case RegexCharClass.HexDigitUpperClass: 5231case RegexCharClass.NotHexDigitUpperClass: 5232negate ^= charClass == RegexCharClass.NotHexDigitUpperClass; 5237if (RegexCharClass.TryGetSingleRange(charClass, out char lowInclusive, out char highInclusive)) 5239negate ^= RegexCharClass.IsNegated(charClass); 5259if (RegexCharClass.TryGetOnlyCategories(charClass, categories, out int numCategories, out bool negated)) 5279switch (RegexCharClass.GetSetChars(charClass, setChars)) 5282negate ^= RegexCharClass.IsNegated(charClass); 5283if (RegexCharClass.DifferByOneBit(setChars[0], setChars[1], out mask)) 5293negate ^= RegexCharClass.IsNegated(charClass); 5295return (negate, RegexCharClass.DifferByOneBit(setChars[0], setChars[1], out mask)) switch 5306if (RegexCharClass.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) rangeLower, out (char LowInclusive, char HighInclusive) rangeUpper) && 5313negate ^= RegexCharClass.IsNegated(charClass); 5318RegexCharClass.CharClassAnalysisResults analysis = RegexCharClass.Analyze(charClass); 5330bool negatedClass = RegexCharClass.IsNegated(charClass); 5334if (RegexCharClass.CharInClass((char)i, charClass) ^ negatedClass) 5365bool negatedClass = RegexCharClass.IsNegated(charClass); 5369if (RegexCharClass.CharInClass((char)i, charClass) ^ negatedClass) 5389if (RegexCharClass.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) range0, out (char LowInclusive, char HighInclusive) range1)) 5391negate ^= RegexCharClass.IsNegated(charClass); 5444if (RegexCharClass.CharInClass(c, charClass)) 5657RegexCharClass.AnyClass => "any character", 5658RegexCharClass.AsciiLetterClass => "an ASCII letter", 5659RegexCharClass.AsciiLetterOrDigitClass => "an ASCII letter or digit", 5660RegexCharClass.ECMASpaceClass => "a whitespace character (ECMA)", 5661RegexCharClass.ECMAWordClass => "a word character (ECMA)", 5662RegexCharClass.HexDigitClass => "a hexadecimal digit", 5663RegexCharClass.HexDigitLowerClass => "a lowercase hexadecimal digit", 5664RegexCharClass.HexDigitUpperClass => "an uppercase hexadecimal digit", 5665RegexCharClass.LetterClass => "a Unicode letter", 5666RegexCharClass.LetterOrDigitClass => "a Unicode letter or digit", 5667RegexCharClass.NotAsciiLetterClass => "any character other than an ASCII letter", 5668RegexCharClass.NotAsciiLetterOrDigitClass => "any character other than an ASCII letter or digit", 5669RegexCharClass.NotControlClass => "any character other than a Unicode control character", 5670RegexCharClass.NotDigitClass => "any character other than a Unicode digit", 5671RegexCharClass.NotECMASpaceClass => "any character other than a whitespace character (ECMA)", 5672RegexCharClass.NotECMAWordClass => "any character other than a word character (ECMA)", 5673RegexCharClass.NotHexDigitClass => "any character other than a hexadecimal digit", 5674RegexCharClass.NotHexDigitLowerClass => "any character other than a lowercase hexadecimal digit", 5675RegexCharClass.NotHexDigitUpperClass => "any character other than an uppercase hexadecimal digit", 5676RegexCharClass.NotLetterClass => "any character other than a Unicode letter", 5677RegexCharClass.NotLetterOrDigitClass => "any character other than a Unicode letter or digit", 5678RegexCharClass.NotLowerClass => "any character other than a Unicode lowercase letter", 5679RegexCharClass.NotNumberClass => "any character other than a Unicode number", 5680RegexCharClass.NotPunctuationClass => "any character other than a Unicode punctuation character", 5681RegexCharClass.NotSeparatorClass => "any character other than a Unicode separator", 5682RegexCharClass.NotSpaceClass => "any character other than a whitespace character", 5683RegexCharClass.NotSymbolClass => "any character other than a Unicode symbol", 5684RegexCharClass.NotUpperClass => "any character other than a Unicode uppercase letter", 5685RegexCharClass.NotWordClass => "any character other than a word character", 5686RegexCharClass.NumberClass => "a Unicode number", 5687RegexCharClass.PunctuationClass => "a Unicode punctuation character", 5688RegexCharClass.SeparatorClass => "a Unicode separator", 5689RegexCharClass.SpaceClass => "a whitespace character", 5690RegexCharClass.SymbolClass => "a Unicode symbol", 5691RegexCharClass.WordClass => "a word character", 5701if (RegexCharClass.TryGetOnlyCategories(charClass, categories, out int numCategories, out bool negatedCategories) && 5748return $"a character in the set {RegexCharClass.DescribeSet(charClass)}";
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexCharClass.cs (10)
189private RegexCharClass? _subtractor; 222private RegexCharClass(bool negate, List<(char First, char Last)>? ranges, StringBuilder? categories, RegexCharClass? subtraction) 242public void AddCharClass(RegexCharClass cc) 260public bool TryAddCharClass(RegexCharClass cc) 298public void AddSubtraction(RegexCharClass sub) 1454public static RegexCharClass Parse(string charClass) 1456RegexCharClass? outermost = null; 1457RegexCharClass? current = null; 1475var level = new RegexCharClass(IsNegated(charClass, pos), ranges, categoriesBuilder, subtraction: null); 1635RegexCharClass? current = this;
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexFindOptimizations.cs (4)
131if (!RegexCharClass.IsNegated(charClass) && 132(scratchCount = RegexCharClass.GetSetChars(charClass, scratch)) > 0) 142Debug.Assert(!RegexCharClass.IsNegated(charClass)); 149Debug.Assert(!RegexCharClass.IsNegated(charClass) || chars is null);
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNode.cs (86)
26/// <remarks>For a <see cref="RegexNodeKind.Multi"/>, this is the string from the expression. For an <see cref="IsSetFamily"/> node, this is the character class string from <see cref="RegexCharClass"/>.</remarks> 126string stringSet = RegexCharClass.CharsToStringClass(equivalences); 1016if (RegexCharClass.IsEmpty(Str)) 1021else if (RegexCharClass.IsSingleton(Str)) 1023Ch = RegexCharClass.SingletonChar(Str); 1031else if (RegexCharClass.IsSingletonInverse(Str)) 1033Ch = RegexCharClass.SingletonChar(Str); 1046case RegexCharClass.WordNotWordClass: 1047case RegexCharClass.NotWordWordClass: 1048case RegexCharClass.DigitNotDigitClass: 1049case RegexCharClass.NotDigitDigitClass: 1050case RegexCharClass.SpaceNotSpaceClass: 1051case RegexCharClass.NotSpaceSpaceClass: 1052Str = RegexCharClass.AnyClass; 1056case RegexCharClass.NegatedDigitClass: // [^\d] 1057Str = RegexCharClass.NotDigitClass; 1059case RegexCharClass.NegatedSpaceClass: // [^\s] 1060Str = RegexCharClass.NotSpaceClass; 1062case RegexCharClass.NegatedWordClass: // [^\w] 1063Str = RegexCharClass.NotWordClass; 1168if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !RegexCharClass.IsMergeable(at.Str!)) 1171lastNodeCannotMerge = !RegexCharClass.IsMergeable(at.Str!); 1189RegexCharClass prevCharClass; 1197prevCharClass = RegexCharClass.Parse(prev.Str!); 1206RegexCharClass atCharClass = RegexCharClass.Parse(at.Str!); 1610if (RegexCharClass.IsNegated(startingLiteralNode.Str!) || 1611(numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars)) == 0) 1684if (RegexCharClass.TryGetSingleRange(node.Str!, out char lowInclusive, out char highInclusive) && 1688return new StartingLiteralData(range: (lowInclusive, highInclusive), negated: RegexCharClass.IsNegated(node.Str!)); 1693if ((numChars = RegexCharClass.GetSetChars(node.Str!, setChars)) != 0) 1695return new StartingLiteralData(setChars: setChars.Slice(0, numChars).ToString(), negated: RegexCharClass.IsNegated(node.Str!)); 2414case RegexNodeKind.Set when loopNode.Kind is RegexNodeKind.Setloop && RegexCharClass.IsSubsetOf(literal.Str!, loopNode.Str!): // e.g. \d+[0-9]\s 2440RegexNodeKind.Setloop => RegexCharClass.CharInClass(ch, loopNode.Str!), 2540case RegexNodeKind.Set when !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2543case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2547case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsBoundaryWordChar(node.Ch): 2548case RegexNodeKind.NonBoundary when node.M > 0 && !RegexCharClass.IsBoundaryWordChar(node.Ch): 2549case RegexNodeKind.ECMABoundary when node.M > 0 && RegexCharClass.IsECMAWordChar(node.Ch): 2550case RegexNodeKind.NonECMABoundary when node.M > 0 && !RegexCharClass.IsECMAWordChar(node.Ch): 2555case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2587case RegexNodeKind.One when !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2588case RegexNodeKind.Set when !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2589case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2590case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2591case RegexNodeKind.Multi when !RegexCharClass.CharInClass(subsequent.Str![0], node.Str!): 2593case RegexNodeKind.EndZ or RegexNodeKind.Eol when !RegexCharClass.CharInClass('\n', node.Str!): 2594case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsSubsetOf(node.Str!, RegexCharClass.WordClass): 2595case RegexNodeKind.NonBoundary when node.M > 0 && node.Str is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass: 2596case RegexNodeKind.ECMABoundary when node.M > 0 && node.Str is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass: 2597case RegexNodeKind.NonECMABoundary when node.M > 0 && node.Str is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass: 2600case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2601case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2621(node.N > 1 && RegexCharClass.MayOverlap(loopStartingSet, loopEndingSet))) 2627RegexCharClass.CharInClass(ch, loopStartingSet) || RegexCharClass.CharInClass(ch, loopEndingSet); 2630RegexCharClass.MayOverlap(set, loopStartingSet) || RegexCharClass.MayOverlap(set, loopEndingSet); 2641case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsSubsetOf(loopStartingSet, RegexCharClass.WordClass) && RegexCharClass.IsSubsetOf(loopEndingSet, RegexCharClass.WordClass): 2642case RegexNodeKind.NonBoundary when node.M > 0 && (loopStartingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass): 2643case RegexNodeKind.ECMABoundary when node.M > 0 && (loopStartingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass) && (loopEndingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass): 2644case RegexNodeKind.NonECMABoundary when node.M > 0 && (loopStartingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass): 2816RegexCharClass.IsSubsetOf(set, RegexCharClass.WordClass); 3139RegexCharClass.ParticipatesInCaseConversion(child.Ch)) 3151RegexCharClass.ParticipatesInCaseConversion(child.Str.AsSpan())) 3163if (!RegexCharClass.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars)) 3515sb.Append(" '").Append(RegexCharClass.DescribeChar(Ch)).Append('\''); 3532sb.Append(RegexCharClass.DescribeChar(c)); 3540sb.Append(' ').Append(RegexCharClass.DescribeSet(Str!));
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexNodeKind.cs (4)
22/// <remarks>The <see cref="RegexCharClass"/> set string is specified in <see cref="RegexNode.Str"/>.</remarks> 40/// <remarks>The <see cref="RegexCharClass"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.</remarks> 53/// <remarks>The <see cref="RegexCharClass"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.</remarks> 71/// The <see cref="RegexCharClass"/> set string is specified in <see cref="RegexNode.Str"/>, the minimum number of iterations in <see cref="RegexNode.M"/>, and the maximum number of iterations in <see cref="RegexNode.N"/>.
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexParser.cs (34)
418_unit = new RegexNode(RegexNodeKind.Set, _options & ~RegexOptions.IgnoreCase, RegexCharClass.AnyClass); 422_unit = new RegexNode(RegexNodeKind.Set, _options & ~RegexOptions.IgnoreCase, RegexCharClass.NotAnyNewLineClass); 574private RegexCharClass? ScanCharClass(bool caseInsensitive, bool scanOnly) 583List<RegexCharClass?>? parents = null; 585RegexCharClass? charClass = scanOnly ? null : new RegexCharClass(); 641RegexCharClass? parent = parents[parents.Count - 1]; 758(parents ??= new List<RegexCharClass?>()).Add(charClass); 787(parents ??= new List<RegexCharClass?>()).Add(scanOnly ? null : charClass); 935else if (RegexCharClass.IsBoundaryWordChar(ch)) 982else if (RegexCharClass.IsBoundaryWordChar(ch)) 1037else if (RegexCharClass.IsBoundaryWordChar(ch)) 1171new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMAWordClass : RegexCharClass.WordClass); 1176new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMAWordClass : RegexCharClass.NotWordClass); 1181new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMASpaceClass : RegexCharClass.SpaceClass); 1186new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMASpaceClass : RegexCharClass.NotSpaceClass); 1191new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMADigitClass : RegexCharClass.DigitClass); 1196new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMADigitClass : RegexCharClass.NotDigitClass); 1206var cc = new RegexCharClass(); 1336else if (angled && RegexCharClass.IsBoundaryWordChar(ch)) 1435else if (angled && RegexCharClass.IsBoundaryWordChar(ch)) 1497if (!RegexCharClass.IsBoundaryWordChar(_pattern[_pos++])) 1684if ((_options & RegexOptions.ECMAScript) == 0 && RegexCharClass.IsBoundaryWordChar(ch)) 1710if (!(RegexCharClass.IsBoundaryWordChar(ch) || ch == '-')) 1776anyNewLineOptEnd.AddChild(new RegexNode(RegexNodeKind.Set, lookaheadOptsNoCase, RegexCharClass.AnyNewLineClass).MakeQuantifier(false, 0, 1)); 1807innerAlt.AddChild(new RegexNode(RegexNodeKind.Set, lookaheadOptsNoCase, RegexCharClass.AnyNewLineClass)); 1833innerAlt.AddChild(new RegexNode(RegexNodeKind.Set, lookbehindOptsNoCase, RegexCharClass.AnyNewLineClass)); 1922if (ch != '0' && RegexCharClass.IsBoundaryWordChar(ch)) 2197case > 1 when (_options & RegexOptions.IgnoreCase) == 0 || isReplacement || !RegexCharClass.ParticipatesInCaseConversion(_pattern.AsSpan(pos, cch)):
src\runtime\src\libraries\System.Text.RegularExpressions\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (32)
112case RegexNodeKind.One or RegexNodeKind.Oneloop or RegexNodeKind.Onelazy or RegexNodeKind.Oneloopatomic when !ignoreCase || !RegexCharClass.ParticipatesInCaseConversion(node.Ch): 138if (RegexCharClass.ParticipatesInCaseConversion(c)) 156case RegexNodeKind.Set or RegexNodeKind.Setloop or RegexNodeKind.Setlazy or RegexNodeKind.Setloopatomic when !RegexCharClass.IsNegated(node.Str!): // negated sets are too complex to analyze 158int charCount = RegexCharClass.GetSetChars(node.Str!, setChars); 197if (!RegexCharClass.SetContainsAsciiOrdinalIgnoreCaseCharacter(node.Str!, setChars)) 530if (results[i].Set == RegexCharClass.AnyClass) 532results.RemoveAll(s => s.Set == RegexCharClass.AnyClass); 543charClass == RegexCharClass.AnyClass) // weed out match-all, same as above 557result.Negated = RegexCharClass.IsNegated(result.Set); 559if (RegexCharClass.TryGetSingleRange(result.Set, out char lowInclusive, out char highInclusive) && 566int count = RegexCharClass.GetSetChars(result.Set, scratch); 603string setString = RegexCharClass.OneToStringClass(node.Ch); 611string setString = RegexCharClass.OneToStringClass(node.Ch); 627string setString = RegexCharClass.OneToStringClass(s[i]); 714var combined = new Dictionary<int, (RegexCharClass Set, int Count)>(); 742if (combined.TryGetValue(fixedSet.Distance, out (RegexCharClass Set, int Count) value)) 744if (value.Set.TryAddCharClass(RegexCharClass.Parse(fixedSet.Set))) 752combined[fixedSet.Distance] = (RegexCharClass.Parse(fixedSet.Set), 1); 757foreach (KeyValuePair<int, (RegexCharClass Set, int Count)> pair in combined) 924RegexCharClass? cc = null; 942static bool? TryFindFirstOrLastCharClass(RegexNode node, bool findFirst, ref RegexCharClass? cc) 986cc = RegexCharClass.Parse(node.Str!); 989else if (cc.CanMerge && RegexCharClass.Parse(node.Str!) is { CanMerge: true } setCc) 1184RegexCharClass.CharInClass(prefix[0], firstChild.Str!) ? null : 1200!RegexCharClass.ParticipatesInCaseConversion(ordinalCaseInsensitivePrefix[0]) || 1203if (RegexCharClass.ParticipatesInCaseConversion(ordinalCaseInsensitivePrefix[0])) 1205if (RegexCharClass.CharInClass((char)(ordinalCaseInsensitivePrefix[0] | 0x20), firstChild.Str!) || 1206RegexCharClass.CharInClass((char)(ordinalCaseInsensitivePrefix[0] & ~0x20), firstChild.Str!)) 1211else if (RegexCharClass.CharInClass(ordinalCaseInsensitivePrefix[0], firstChild.Str!)) 1232!RegexCharClass.IsNegated(nextChild.Str!) && 1236chars = chars.Slice(0, RegexCharClass.GetSetChars(nextChild.Str!, chars)); 1241if (RegexCharClass.CharInClass(c, firstChild.Str!))