10 instantiations of RegexCharClass
System.Text.RegularExpressions (10)
System\Text\RegularExpressions\RegexCharClass.cs (1)
1455var level = new RegexCharClass(IsNegated(charClass, pos), ranges, categoriesBuilder, subtraction: null);
System\Text\RegularExpressions\RegexNode.cs (1)
1137prevCharClass = new RegexCharClass();
System\Text\RegularExpressions\RegexParser.cs (4)
562RegexCharClass? charClass = scanOnly ? null : new RegexCharClass(); 736charClass = new RegexCharClass(); 767charClass = new RegexCharClass(); 1178var cc = new RegexCharClass();
System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (3)
957cc ??= new RegexCharClass(); 966cc ??= new RegexCharClass(); 1003cc ??= new RegexCharClass();
System\Text\RegularExpressions\Symbolic\CharSetSolver.cs (1)
138var rcc = new RegexCharClass();
279 references to RegexCharClass
System.Text.RegularExpressions (279)
System\Text\RegularExpressions\RegexCharClass.cs (10)
186private RegexCharClass? _subtractor; 219private RegexCharClass(bool negate, List<(char First, char Last)>? ranges, StringBuilder? categories, RegexCharClass? subtraction) 239public void AddCharClass(RegexCharClass cc) 257public bool TryAddCharClass(RegexCharClass cc) 295public void AddSubtraction(RegexCharClass sub) 1434public static RegexCharClass Parse(string charClass) 1436RegexCharClass? outermost = null; 1437RegexCharClass? current = null; 1455var level = new RegexCharClass(IsNegated(charClass, pos), ranges, categoriesBuilder, subtraction: null); 1615RegexCharClass? current = this;
System\Text\RegularExpressions\RegexCompiler.cs (82)
892primarySet.Set != RegexCharClass.NotNewLineClass && 893primarySet.Set != RegexCharClass.AnyClass; 990else if (RegexCharClass.IsUnicodeCategoryOfSmallCharCount(primarySet.Set, out char[]? setChars, out bool negated, out _)) 1008if (!RegexCharClass.CharInClass((char)i, primarySet.Set)) 1952int numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars); 3995node.Str == RegexCharClass.AnyClass && 4523if (node.IsSetFamily && node.Str == RegexCharClass.AnyClass) 4700else if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 5397if (RegexCharClass.TryGetSingleRange(node.Str, out _, out _) || 5398RegexCharClass.GetSetChars(node.Str, setChars) > 0) 5447bool negated = RegexCharClass.IsNegated(node.Str) ^ negate; 5451if (RegexCharClass.TryGetSingleRange(node.Str, out char lowInclusive, out char highInclusive) && 5468int setCharsCount = RegexCharClass.GetSetChars(node.Str, setChars); 5739case RegexCharClass.AnyClass: 5745case RegexCharClass.DigitClass: 5746case RegexCharClass.NotDigitClass: 5749NegateIf(charClass == RegexCharClass.NotDigitClass); 5752case RegexCharClass.SpaceClass: 5753case RegexCharClass.NotSpaceClass: 5756NegateIf(charClass == RegexCharClass.NotSpaceClass); 5759case RegexCharClass.WordClass: 5760case RegexCharClass.NotWordClass: 5763NegateIf(charClass == RegexCharClass.NotWordClass); 5766case RegexCharClass.ControlClass: 5767case RegexCharClass.NotControlClass: 5770NegateIf(charClass == RegexCharClass.NotControlClass); 5773case RegexCharClass.LetterClass: 5774case RegexCharClass.NotLetterClass: 5777NegateIf(charClass == RegexCharClass.NotLetterClass); 5780case RegexCharClass.LetterOrDigitClass: 5781case RegexCharClass.NotLetterOrDigitClass: 5784NegateIf(charClass == RegexCharClass.NotLetterOrDigitClass); 5787case RegexCharClass.LowerClass: 5788case RegexCharClass.NotLowerClass: 5791NegateIf(charClass == RegexCharClass.NotLowerClass); 5794case RegexCharClass.UpperClass: 5795case RegexCharClass.NotUpperClass: 5798NegateIf(charClass == RegexCharClass.NotUpperClass); 5801case RegexCharClass.NumberClass: 5802case RegexCharClass.NotNumberClass: 5805NegateIf(charClass == RegexCharClass.NotNumberClass); 5808case RegexCharClass.PunctuationClass: 5809case RegexCharClass.NotPunctuationClass: 5812NegateIf(charClass == RegexCharClass.NotPunctuationClass); 5815case RegexCharClass.SeparatorClass: 5816case RegexCharClass.NotSeparatorClass: 5819NegateIf(charClass == RegexCharClass.NotSeparatorClass); 5822case RegexCharClass.SymbolClass: 5823case RegexCharClass.NotSymbolClass: 5826NegateIf(charClass == RegexCharClass.NotSymbolClass); 5829case RegexCharClass.AsciiLetterClass: 5830case RegexCharClass.NotAsciiLetterClass: 5833NegateIf(charClass == RegexCharClass.NotAsciiLetterClass); 5836case RegexCharClass.AsciiLetterOrDigitClass: 5837case RegexCharClass.NotAsciiLetterOrDigitClass: 5840NegateIf(charClass == RegexCharClass.NotAsciiLetterOrDigitClass); 5843case RegexCharClass.HexDigitClass: 5844case RegexCharClass.NotHexDigitClass: 5847NegateIf(charClass == RegexCharClass.NotHexDigitClass); 5850case RegexCharClass.HexDigitLowerClass: 5851case RegexCharClass.NotHexDigitLowerClass: 5854NegateIf(charClass == RegexCharClass.NotHexDigitLowerClass); 5857case RegexCharClass.HexDigitUpperClass: 5858case RegexCharClass.NotHexDigitUpperClass: 5861NegateIf(charClass == RegexCharClass.NotHexDigitUpperClass); 5866if (RegexCharClass.TryGetSingleRange(charClass, out char lowInclusive, out char highInclusive)) 5884NegateIf(RegexCharClass.IsNegated(charClass)); 5895if (RegexCharClass.TryGetOnlyCategories(charClass, categories, out int numCategories, out bool negated)) 5913int numChars = RegexCharClass.GetSetChars(charClass, setChars); 5916if (RegexCharClass.DifferByOneBit(setChars[0], setChars[1], out int mask)) // special-case common case of an upper and lowercase ASCII letter combination 5946NegateIf(RegexCharClass.IsNegated(charClass)); 5952if (RegexCharClass.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) rangeLower, out (char LowInclusive, char HighInclusive) rangeUpper) && 5959bool negate = RegexCharClass.IsNegated(charClass); 5974RegexCharClass.CharClassAnalysisResults analysis = RegexCharClass.Analyze(charClass); 5985bool negatedClass = RegexCharClass.IsNegated(charClass); 5988if (RegexCharClass.CharInClass((char)i, charClass) ^ negatedClass) 6043bool negatedClass = RegexCharClass.IsNegated(charClass); 6046if (RegexCharClass.CharInClass((char)i, charClass) ^ negatedClass) 6094if (RegexCharClass.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) range0, out (char LowInclusive, char HighInclusive) range1)) 6096bool negate = RegexCharClass.IsNegated(charClass); 6232if (RegexCharClass.CharInClass(c, charClass))
System\Text\RegularExpressions\RegexFindOptimizations.cs (10)
131if (!RegexCharClass.IsNegated(charClass) && 132(scratchCount = RegexCharClass.GetSetChars(charClass, scratch)) > 0) 142Debug.Assert(!RegexCharClass.IsNegated(charClass)); 149Debug.Assert(!RegexCharClass.IsNegated(charClass) || chars is null); 498if (RegexCharClass.CharInClass(span[i], set, ref startingAsciiLookup)) 677if (RegexCharClass.CharInClass(span[i], primarySet.Set, ref startingAsciiLookup)) 771if (!RegexCharClass.CharInClass(c, nextSet.Set, ref _asciiLookups![i])) 790if (!RegexCharClass.CharInClass(c, primarySet.Set, ref startingAsciiLookup)) 799if (!RegexCharClass.CharInClass(c, nextSet.Set, ref _asciiLookups![i])) 841while ((uint)--prev < (uint)slice.Length && RegexCharClass.CharInClass(slice[prev], loopNode.Str!, ref _asciiLookups![0])) ;
System\Text\RegularExpressions\RegexInterpreter.cs (4)
852if (!RegexCharClass.CharInClass(Forwardcharnext(inputSpan), _code.Strings[operand], ref _code.StringsAsciiLookup[operand])) 944if (!RegexCharClass.CharInClass(Forwardcharnext(inputSpan), set, ref setLookup)) 1031if (!RegexCharClass.CharInClass(Forwardcharnext(inputSpan), set, ref setLookup)) 1122if (!RegexCharClass.CharInClass(Forwardcharnext(inputSpan), _code.Strings[operand0], ref _code.StringsAsciiLookup[operand0]))
System\Text\RegularExpressions\RegexInterpreterCode.cs (2)
165sb.Append(Indent()).Append('\'').Append(RegexCharClass.DescribeChar((char)Codes[opcodeOffset + 1])).Append('\''); 173sb.Append(Indent()).Append(RegexCharClass.DescribeSet(Strings[Codes[opcodeOffset + 1]]));
System\Text\RegularExpressions\RegexNode.cs (80)
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); 961if (RegexCharClass.IsEmpty(Str)) 966else if (RegexCharClass.IsSingleton(Str)) 968Ch = RegexCharClass.SingletonChar(Str); 976else if (RegexCharClass.IsSingletonInverse(Str)) 978Ch = RegexCharClass.SingletonChar(Str); 991case RegexCharClass.WordNotWordClass: 992case RegexCharClass.NotWordWordClass: 993case RegexCharClass.DigitNotDigitClass: 994case RegexCharClass.NotDigitDigitClass: 995case RegexCharClass.SpaceNotSpaceClass: 996case RegexCharClass.NotSpaceSpaceClass: 997Str = RegexCharClass.AnyClass; 1001case RegexCharClass.NegatedDigitClass: // [^\d] 1002Str = RegexCharClass.NotDigitClass; 1004case RegexCharClass.NegatedSpaceClass: // [^\s] 1005Str = RegexCharClass.NotSpaceClass; 1007case RegexCharClass.NegatedWordClass: // [^\w] 1008Str = RegexCharClass.NotWordClass; 1113if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !RegexCharClass.IsMergeable(at.Str!)) 1116lastNodeCannotMerge = !RegexCharClass.IsMergeable(at.Str!); 1134RegexCharClass prevCharClass; 1142prevCharClass = RegexCharClass.Parse(prev.Str!); 1151RegexCharClass atCharClass = RegexCharClass.Parse(at.Str!); 1552if (RegexCharClass.IsNegated(startingLiteralNode.Str!) || 1553(numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars)) == 0) 1626if (RegexCharClass.TryGetSingleRange(node.Str!, out char lowInclusive, out char highInclusive) && 1630return new StartingLiteralData(range: (lowInclusive, highInclusive), negated: RegexCharClass.IsNegated(node.Str!)); 1635if ((numChars = RegexCharClass.GetSetChars(node.Str!, setChars)) != 0) 1637return new StartingLiteralData(setChars: setChars.Slice(0, numChars).ToString(), negated: RegexCharClass.IsNegated(node.Str!)); 2424case RegexNodeKind.Set when !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2427case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2431case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsBoundaryWordChar(node.Ch): 2432case RegexNodeKind.NonBoundary when node.M > 0 && !RegexCharClass.IsBoundaryWordChar(node.Ch): 2433case RegexNodeKind.ECMABoundary when node.M > 0 && RegexCharClass.IsECMAWordChar(node.Ch): 2434case RegexNodeKind.NonECMABoundary when node.M > 0 && !RegexCharClass.IsECMAWordChar(node.Ch): 2439case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2471case RegexNodeKind.One when !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2472case RegexNodeKind.Set when !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2473case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2474case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2475case RegexNodeKind.Multi when !RegexCharClass.CharInClass(subsequent.Str![0], node.Str!): 2477case RegexNodeKind.EndZ or RegexNodeKind.Eol when !RegexCharClass.CharInClass('\n', node.Str!): 2478case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsKnownWordClassSubset(node.Str!): 2479case RegexNodeKind.NonBoundary when node.M > 0 && node.Str is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass: 2480case RegexNodeKind.ECMABoundary when node.M > 0 && node.Str is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass: 2481case RegexNodeKind.NonECMABoundary when node.M > 0 && node.Str is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass: 2484case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2485case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2505(node.N > 1 && RegexCharClass.MayOverlap(loopStartingSet, loopEndingSet))) 2511RegexCharClass.CharInClass(ch, loopStartingSet) || RegexCharClass.CharInClass(ch, loopEndingSet); 2514RegexCharClass.MayOverlap(set, loopStartingSet) || RegexCharClass.MayOverlap(set, loopEndingSet); 2525case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsKnownWordClassSubset(loopStartingSet) && RegexCharClass.IsKnownWordClassSubset(loopEndingSet): 2526case RegexNodeKind.NonBoundary when node.M > 0 && (loopStartingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass): 2527case RegexNodeKind.ECMABoundary when node.M > 0 && (loopStartingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass) && (loopEndingSet is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass): 2528case RegexNodeKind.NonECMABoundary when node.M > 0 && (loopStartingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass) && (loopEndingSet is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass): 2679RegexCharClass.IsKnownWordClassSubset(set); 2979RegexCharClass.ParticipatesInCaseConversion(child.Ch)) 2991RegexCharClass.ParticipatesInCaseConversion(child.Str.AsSpan())) 3003if (!RegexCharClass.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars)) 3327sb.Append(" '").Append(RegexCharClass.DescribeChar(Ch)).Append('\''); 3344sb.Append(RegexCharClass.DescribeChar(c)); 3352sb.Append(' ').Append(RegexCharClass.DescribeSet(Str!));
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"/>.
System\Text\RegularExpressions\RegexParser.cs (30)
403new RegexNode(RegexNodeKind.Set, _options & ~RegexOptions.IgnoreCase, RegexCharClass.AnyClass) : 551private RegexCharClass? ScanCharClass(bool caseInsensitive, bool scanOnly) 560List<RegexCharClass?>? parents = null; 562RegexCharClass? charClass = scanOnly ? null : new RegexCharClass(); 618RegexCharClass? parent = parents[parents.Count - 1]; 735(parents ??= new List<RegexCharClass?>()).Add(charClass); 764(parents ??= new List<RegexCharClass?>()).Add(scanOnly ? null : charClass); 912else if (RegexCharClass.IsBoundaryWordChar(ch)) 959else if (RegexCharClass.IsBoundaryWordChar(ch)) 1014else if (RegexCharClass.IsBoundaryWordChar(ch)) 1143new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMAWordClass : RegexCharClass.WordClass); 1148new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMAWordClass : RegexCharClass.NotWordClass); 1153new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMASpaceClass : RegexCharClass.SpaceClass); 1158new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMASpaceClass : RegexCharClass.NotSpaceClass); 1163new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.ECMADigitClass : RegexCharClass.DigitClass); 1168new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ? RegexCharClass.NotECMADigitClass : RegexCharClass.NotDigitClass); 1178var cc = new RegexCharClass(); 1308else if (angled && RegexCharClass.IsBoundaryWordChar(ch)) 1407else if (angled && RegexCharClass.IsBoundaryWordChar(ch)) 1469if (!RegexCharClass.IsBoundaryWordChar(_pattern[_pos++])) 1656if ((_options & RegexOptions.ECMAScript) == 0 && RegexCharClass.IsBoundaryWordChar(ch)) 1682if (!(RegexCharClass.IsBoundaryWordChar(ch) || ch == '-')) 1775if (ch != '0' && RegexCharClass.IsBoundaryWordChar(ch)) 2050case > 1 when (_options & RegexOptions.IgnoreCase) == 0 || isReplacement || !RegexCharClass.ParticipatesInCaseConversion(_pattern.AsSpan(pos, cch)):
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!))
System\Text\RegularExpressions\RegexRunner.cs (14)
410return (index > startpos && RegexCharClass.IsBoundaryWordChar(runtext![index - 1])) != 411(index < endpos && RegexCharClass.IsBoundaryWordChar(runtext![index])); 417return ((uint)indexM1 < (uint)inputSpan.Length && RegexCharClass.IsBoundaryWordChar(inputSpan[indexM1])) != 418((uint)index < (uint)inputSpan.Length && RegexCharClass.IsBoundaryWordChar(inputSpan[index])); 427return (uint)indexMinus1 >= (uint)inputSpan.Length || !RegexCharClass.IsBoundaryWordChar(inputSpan[indexMinus1]); 434(uint)index >= (uint)inputSpan.Length || !RegexCharClass.IsBoundaryWordChar(inputSpan[index]); 437internal static bool IsWordChar(char ch) => RegexCharClass.IsWordChar(ch); 441return (index > startpos && RegexCharClass.IsECMAWordChar(runtext![index - 1])) != 442(index < endpos && RegexCharClass.IsECMAWordChar(runtext![index])); 448return ((uint)indexM1 < (uint)inputSpan.Length && RegexCharClass.IsECMAWordChar(inputSpan[indexM1])) != 449((uint)index < (uint)inputSpan.Length && RegexCharClass.IsECMAWordChar(inputSpan[index])); 455string charClass = RegexCharClass.ConvertOldStringsToClass(set, category); 456return RegexCharClass.CharInClass(ch, charClass); 461return RegexCharClass.CharInClass(ch, charClass);
System\Text\RegularExpressions\Symbolic\CharSetSolver.cs (2)
138var rcc = new RegexCharClass(); 143return RegexCharClass.DescribeSet(rcc.ToStringClass());
System\Text\RegularExpressions\Symbolic\RegexNodeConverter.cs (9)
22/// <summary>Cache of BDDs created to represent <see cref="RegexCharClass"/> set strings.</summary> 323/// <summary>Creates a BDD from the <see cref="RegexCharClass"/> set string to determine whether a char is in the set.</summary> 355bool negate = RegexCharClass.IsNegated(set); 361List<(char First, char Last)>? ranges = RegexCharClass.ComputeRanges(set); 381int setLength = set[RegexCharClass.SetLengthIndex]; 382int catLength = set[RegexCharClass.CategoryLengthIndex]; 383int catStart = setLength + RegexCharClass.SetStartIndex; 523Debug.Assert(Enum.IsDefined(code) || code == (UnicodeCategory)(RegexCharClass.SpaceConst - 1), $"Unknown category: {code}"); 524return code == (UnicodeCategory)(RegexCharClass.SpaceConst - 1) ?