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