9 instantiations of RegexCharClass
System.Text.RegularExpressions (9)
System\Text\RegularExpressions\RegexCharClass.cs (1)
1623
return new
RegexCharClass
(IsNegated(charClass, start), ranges, categoriesBuilder, sub);
System\Text\RegularExpressions\RegexNode.cs (2)
1137
prevCharClass = new
RegexCharClass
();
1142
prevCharClass = new
RegexCharClass
();
System\Text\RegularExpressions\RegexParser.cs (2)
555
RegexCharClass? charClass = scanOnly ? null : new
RegexCharClass
();
1131
var cc = new
RegexCharClass
();
System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (3)
957
cc ??= new
RegexCharClass
();
966
cc ??= new
RegexCharClass
();
1003
cc ??= new
RegexCharClass
();
System\Text\RegularExpressions\Symbolic\CharSetSolver.cs (1)
138
var rcc = new
RegexCharClass
();
275 references to RegexCharClass
System.Text.RegularExpressions (275)
System\Text\RegularExpressions\RegexCharClass.cs (8)
319
private
RegexCharClass
? _subtractor;
352
private RegexCharClass(bool negate, List<(char First, char Last)>? ranges, StringBuilder? categories,
RegexCharClass
? subtraction)
389
public void AddCharClass(
RegexCharClass
cc)
407
public bool TryAddCharClass(
RegexCharClass
cc)
445
public void AddSubtraction(
RegexCharClass
sub)
1598
public static
RegexCharClass
Parse(string charClass) => ParseRecursive(charClass, 0);
1600
private static
RegexCharClass
ParseRecursive(string charClass, int start)
1611
RegexCharClass
? sub = null;
System\Text\RegularExpressions\RegexCompiler.cs (82)
867
primarySet.Set !=
RegexCharClass
.NotNewLineClass &&
868
primarySet.Set !=
RegexCharClass
.AnyClass;
965
else if (
RegexCharClass
.IsUnicodeCategoryOfSmallCharCount(primarySet.Set, out char[]? setChars, out bool negated, out _))
983
if (!
RegexCharClass
.CharInClass((char)i, primarySet.Set))
3746
node.Str ==
RegexCharClass
.AnyClass &&
4274
if (node.IsSetFamily && node.Str ==
RegexCharClass
.AnyClass)
4451
else if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str ==
RegexCharClass
.AnyClass)
5148
if (
RegexCharClass
.TryGetSingleRange(node.Str, out _, out _) ||
5149
RegexCharClass
.GetSetChars(node.Str, setChars) > 0)
5198
bool negated =
RegexCharClass
.IsNegated(node.Str) ^ negate;
5202
if (
RegexCharClass
.TryGetSingleRange(node.Str, out char lowInclusive, out char highInclusive) &&
5219
int setCharsCount =
RegexCharClass
.GetSetChars(node.Str, setChars);
5490
case
RegexCharClass
.AnyClass:
5496
case
RegexCharClass
.DigitClass:
5497
case
RegexCharClass
.NotDigitClass:
5500
NegateIf(charClass ==
RegexCharClass
.NotDigitClass);
5503
case
RegexCharClass
.SpaceClass:
5504
case
RegexCharClass
.NotSpaceClass:
5507
NegateIf(charClass ==
RegexCharClass
.NotSpaceClass);
5510
case
RegexCharClass
.WordClass:
5511
case
RegexCharClass
.NotWordClass:
5514
NegateIf(charClass ==
RegexCharClass
.NotWordClass);
5517
case
RegexCharClass
.ControlClass:
5518
case
RegexCharClass
.NotControlClass:
5521
NegateIf(charClass ==
RegexCharClass
.NotControlClass);
5524
case
RegexCharClass
.LetterClass:
5525
case
RegexCharClass
.NotLetterClass:
5528
NegateIf(charClass ==
RegexCharClass
.NotLetterClass);
5531
case
RegexCharClass
.LetterOrDigitClass:
5532
case
RegexCharClass
.NotLetterOrDigitClass:
5535
NegateIf(charClass ==
RegexCharClass
.NotLetterOrDigitClass);
5538
case
RegexCharClass
.LowerClass:
5539
case
RegexCharClass
.NotLowerClass:
5542
NegateIf(charClass ==
RegexCharClass
.NotLowerClass);
5545
case
RegexCharClass
.UpperClass:
5546
case
RegexCharClass
.NotUpperClass:
5549
NegateIf(charClass ==
RegexCharClass
.NotUpperClass);
5552
case
RegexCharClass
.NumberClass:
5553
case
RegexCharClass
.NotNumberClass:
5556
NegateIf(charClass ==
RegexCharClass
.NotNumberClass);
5559
case
RegexCharClass
.PunctuationClass:
5560
case
RegexCharClass
.NotPunctuationClass:
5563
NegateIf(charClass ==
RegexCharClass
.NotPunctuationClass);
5566
case
RegexCharClass
.SeparatorClass:
5567
case
RegexCharClass
.NotSeparatorClass:
5570
NegateIf(charClass ==
RegexCharClass
.NotSeparatorClass);
5573
case
RegexCharClass
.SymbolClass:
5574
case
RegexCharClass
.NotSymbolClass:
5577
NegateIf(charClass ==
RegexCharClass
.NotSymbolClass);
5580
case
RegexCharClass
.AsciiLetterClass:
5581
case
RegexCharClass
.NotAsciiLetterClass:
5584
NegateIf(charClass ==
RegexCharClass
.NotAsciiLetterClass);
5587
case
RegexCharClass
.AsciiLetterOrDigitClass:
5588
case
RegexCharClass
.NotAsciiLetterOrDigitClass:
5591
NegateIf(charClass ==
RegexCharClass
.NotAsciiLetterOrDigitClass);
5594
case
RegexCharClass
.HexDigitClass:
5595
case
RegexCharClass
.NotHexDigitClass:
5598
NegateIf(charClass ==
RegexCharClass
.NotHexDigitClass);
5601
case
RegexCharClass
.HexDigitLowerClass:
5602
case
RegexCharClass
.NotHexDigitLowerClass:
5605
NegateIf(charClass ==
RegexCharClass
.NotHexDigitLowerClass);
5608
case
RegexCharClass
.HexDigitUpperClass:
5609
case
RegexCharClass
.NotHexDigitUpperClass:
5612
NegateIf(charClass ==
RegexCharClass
.NotHexDigitUpperClass);
5617
if (
RegexCharClass
.TryGetSingleRange(charClass, out char lowInclusive, out char highInclusive))
5635
NegateIf(
RegexCharClass
.IsNegated(charClass));
5646
if (
RegexCharClass
.TryGetOnlyCategories(charClass, categories, out int numCategories, out bool negated))
5664
int numChars =
RegexCharClass
.GetSetChars(charClass, setChars);
5667
if (
RegexCharClass
.DifferByOneBit(setChars[0], setChars[1], out int mask)) // special-case common case of an upper and lowercase ASCII letter combination
5697
NegateIf(
RegexCharClass
.IsNegated(charClass));
5703
if (
RegexCharClass
.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) rangeLower, out (char LowInclusive, char HighInclusive) rangeUpper) &&
5710
bool negate =
RegexCharClass
.IsNegated(charClass);
5725
RegexCharClass
.CharClassAnalysisResults analysis =
RegexCharClass
.Analyze(charClass);
5736
bool negatedClass =
RegexCharClass
.IsNegated(charClass);
5739
if (
RegexCharClass
.CharInClass((char)i, charClass) ^ negatedClass)
5794
bool negatedClass =
RegexCharClass
.IsNegated(charClass);
5797
if (
RegexCharClass
.CharInClass((char)i, charClass) ^ negatedClass)
5845
if (
RegexCharClass
.TryGetDoubleRange(charClass, out (char LowInclusive, char HighInclusive) range0, out (char LowInclusive, char HighInclusive) range1))
5847
bool negate =
RegexCharClass
.IsNegated(charClass);
5983
if (
RegexCharClass
.CharInClass(c, charClass))
6165
if (chars.Length is 4 or 5 && !
RegexCharClass
.IsAscii(chars))
System\Text\RegularExpressions\RegexFindOptimizations.cs (10)
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);
498
if (
RegexCharClass
.CharInClass(span[i], set, ref startingAsciiLookup))
677
if (
RegexCharClass
.CharInClass(span[i], primarySet.Set, ref startingAsciiLookup))
771
if (!
RegexCharClass
.CharInClass(c, nextSet.Set, ref _asciiLookups![i]))
790
if (!
RegexCharClass
.CharInClass(c, primarySet.Set, ref startingAsciiLookup))
799
if (!
RegexCharClass
.CharInClass(c, nextSet.Set, ref _asciiLookups![i]))
841
while ((uint)--prev < (uint)slice.Length &&
RegexCharClass
.CharInClass(slice[prev], loopNode.Str!, ref _asciiLookups![0])) ;
System\Text\RegularExpressions\RegexInterpreter.cs (4)
842
if (!
RegexCharClass
.CharInClass(Forwardcharnext(inputSpan), _code.Strings[operand], ref _code.StringsAsciiLookup[operand]))
934
if (!
RegexCharClass
.CharInClass(Forwardcharnext(inputSpan), set, ref setLookup))
1021
if (!
RegexCharClass
.CharInClass(Forwardcharnext(inputSpan), set, ref setLookup))
1112
if (!
RegexCharClass
.CharInClass(Forwardcharnext(inputSpan), _code.Strings[operand0], ref _code.StringsAsciiLookup[operand0]))
System\Text\RegularExpressions\RegexInterpreterCode.cs (2)
165
sb.Append(Indent()).Append('\'').Append(
RegexCharClass
.DescribeChar((char)Codes[opcodeOffset + 1])).Append('\'');
173
sb.Append(Indent()).Append(
RegexCharClass
.DescribeSet(Strings[Codes[opcodeOffset + 1]]));
System\Text\RegularExpressions\RegexNode.cs (79)
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);
961
if (
RegexCharClass
.IsEmpty(Str))
966
else if (
RegexCharClass
.IsSingleton(Str))
968
Ch =
RegexCharClass
.SingletonChar(Str);
976
else if (
RegexCharClass
.IsSingletonInverse(Str))
978
Ch =
RegexCharClass
.SingletonChar(Str);
991
case
RegexCharClass
.WordNotWordClass:
992
case
RegexCharClass
.NotWordWordClass:
993
case
RegexCharClass
.DigitNotDigitClass:
994
case
RegexCharClass
.NotDigitDigitClass:
995
case
RegexCharClass
.SpaceNotSpaceClass:
996
case
RegexCharClass
.NotSpaceSpaceClass:
997
Str =
RegexCharClass
.AnyClass;
1001
case
RegexCharClass
.NegatedDigitClass: // [^\d]
1002
Str =
RegexCharClass
.NotDigitClass;
1004
case
RegexCharClass
.NegatedSpaceClass: // [^\s]
1005
Str =
RegexCharClass
.NotSpaceClass;
1007
case
RegexCharClass
.NegatedWordClass: // [^\w]
1008
Str =
RegexCharClass
.NotWordClass;
1113
if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !
RegexCharClass
.IsMergeable(at.Str!))
1116
lastNodeCannotMerge = !
RegexCharClass
.IsMergeable(at.Str!);
1134
RegexCharClass
prevCharClass;
1147
prevCharClass =
RegexCharClass
.Parse(prev.Str!);
1160
RegexCharClass
atCharClass =
RegexCharClass
.Parse(at.Str!);
1564
if (
RegexCharClass
.TryGetSingleRange(node.Str!, out char lowInclusive, out char highInclusive) &&
1568
return new StartingLiteralData(range: (lowInclusive, highInclusive), negated:
RegexCharClass
.IsNegated(node.Str!));
1573
if ((numChars =
RegexCharClass
.GetSetChars(node.Str!, setChars)) != 0)
1575
return new StartingLiteralData(setChars: setChars.Slice(0, numChars).ToString(), negated:
RegexCharClass
.IsNegated(node.Str!));
2352
case RegexNodeKind.Set when !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2355
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2359
case RegexNodeKind.Boundary when node.M > 0 &&
RegexCharClass
.IsBoundaryWordChar(node.Ch):
2360
case RegexNodeKind.NonBoundary when node.M > 0 && !
RegexCharClass
.IsBoundaryWordChar(node.Ch):
2361
case RegexNodeKind.ECMABoundary when node.M > 0 &&
RegexCharClass
.IsECMAWordChar(node.Ch):
2362
case RegexNodeKind.NonECMABoundary when node.M > 0 && !
RegexCharClass
.IsECMAWordChar(node.Ch):
2367
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !
RegexCharClass
.CharInClass(node.Ch, subsequent.Str!):
2399
case RegexNodeKind.One when !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2400
case RegexNodeKind.Set when !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2401
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M > 0 && !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2402
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2403
case RegexNodeKind.Multi when !
RegexCharClass
.CharInClass(subsequent.Str![0], node.Str!):
2405
case RegexNodeKind.EndZ or RegexNodeKind.Eol when !
RegexCharClass
.CharInClass('\n', node.Str!):
2406
case RegexNodeKind.Boundary when node.M > 0 &&
RegexCharClass
.IsKnownWordClassSubset(node.Str!):
2407
case RegexNodeKind.NonBoundary when node.M > 0 && node.Str is
RegexCharClass
.NotWordClass or
RegexCharClass
.NotDigitClass:
2408
case RegexNodeKind.ECMABoundary when node.M > 0 && node.Str is
RegexCharClass
.ECMAWordClass or
RegexCharClass
.ECMADigitClass:
2409
case RegexNodeKind.NonECMABoundary when node.M > 0 && node.Str is
RegexCharClass
.NotECMAWordClass or
RegexCharClass
.NotDigitClass:
2412
case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M == 0 && !
RegexCharClass
.CharInClass(subsequent.Ch, node.Str!):
2413
case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !
RegexCharClass
.MayOverlap(node.Str!, subsequent.Str!):
2433
(node.N > 1 &&
RegexCharClass
.MayOverlap(loopStartingSet, loopEndingSet)))
2439
RegexCharClass
.CharInClass(ch, loopStartingSet) ||
RegexCharClass
.CharInClass(ch, loopEndingSet);
2442
RegexCharClass
.MayOverlap(set, loopStartingSet) ||
RegexCharClass
.MayOverlap(set, loopEndingSet);
2453
case RegexNodeKind.Boundary when node.M > 0 &&
RegexCharClass
.IsKnownWordClassSubset(loopStartingSet) &&
RegexCharClass
.IsKnownWordClassSubset(loopEndingSet):
2454
case RegexNodeKind.NonBoundary when node.M > 0 && (loopStartingSet is
RegexCharClass
.NotWordClass or
RegexCharClass
.NotDigitClass) && (loopEndingSet is
RegexCharClass
.NotWordClass or
RegexCharClass
.NotDigitClass):
2455
case RegexNodeKind.ECMABoundary when node.M > 0 && (loopStartingSet is
RegexCharClass
.ECMAWordClass or
RegexCharClass
.ECMADigitClass) && (loopEndingSet is
RegexCharClass
.ECMAWordClass or
RegexCharClass
.ECMADigitClass):
2456
case RegexNodeKind.NonECMABoundary when node.M > 0 && (loopStartingSet is
RegexCharClass
.NotECMAWordClass or
RegexCharClass
.NotDigitClass) && (loopEndingSet is
RegexCharClass
.NotECMAWordClass or
RegexCharClass
.NotDigitClass):
2561
RegexCharClass
.IsKnownWordClassSubset(set);
2861
RegexCharClass
.ParticipatesInCaseConversion(child.Ch))
2872
if (!
RegexCharClass
.IsAscii(child.Str.AsSpan()) ||
2873
RegexCharClass
.ParticipatesInCaseConversion(child.Str.AsSpan()))
2885
if (!
RegexCharClass
.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars))
3209
sb.Append(" '").Append(
RegexCharClass
.DescribeChar(Ch)).Append('\'');
3226
sb.Append(
RegexCharClass
.DescribeChar(c));
3234
sb.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 (27)
403
new RegexNode(RegexNodeKind.Set, _options & ~RegexOptions.IgnoreCase,
RegexCharClass
.AnyClass) :
547
private
RegexCharClass
? ScanCharClass(bool caseInsensitive, bool scanOnly)
555
RegexCharClass
? charClass = scanOnly ? null : new RegexCharClass();
710
RegexCharClass
? rcc = ScanCharClass(caseInsensitive, scanOnly);
865
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
912
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
967
else if (
RegexCharClass
.IsBoundaryWordChar(ch))
1096
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMAWordClass :
RegexCharClass
.WordClass);
1101
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMAWordClass :
RegexCharClass
.NotWordClass);
1106
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMASpaceClass :
RegexCharClass
.SpaceClass);
1111
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMASpaceClass :
RegexCharClass
.NotSpaceClass);
1116
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.ECMADigitClass :
RegexCharClass
.DigitClass);
1121
new RegexNode(RegexNodeKind.Set, (_options & ~RegexOptions.IgnoreCase), (_options & RegexOptions.ECMAScript) != 0 ?
RegexCharClass
.NotECMADigitClass :
RegexCharClass
.NotDigitClass);
1131
var
cc = new RegexCharClass();
1261
else if (angled &&
RegexCharClass
.IsBoundaryWordChar(ch))
1360
else if (angled &&
RegexCharClass
.IsBoundaryWordChar(ch))
1422
if (!
RegexCharClass
.IsBoundaryWordChar(_pattern[_pos++]))
1609
if ((_options & RegexOptions.ECMAScript) == 0 &&
RegexCharClass
.IsBoundaryWordChar(ch))
1635
if (!(
RegexCharClass
.IsBoundaryWordChar(ch) || ch == '-'))
1728
if (ch != '0' &&
RegexCharClass
.IsBoundaryWordChar(ch))
2021
case > 1 when (_options & RegexOptions.IgnoreCase) == 0 || isReplacement || !
RegexCharClass
.ParticipatesInCaseConversion(_pattern.AsSpan(pos, cch)):
System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (34)
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)
829
if (!
RegexCharClass
.IsAscii(s1Chars) && !
RegexCharClass
.IsAscii(s2Chars))
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!))
System\Text\RegularExpressions\RegexRunner.cs (14)
410
return (index > startpos &&
RegexCharClass
.IsBoundaryWordChar(runtext![index - 1])) !=
411
(index < endpos &&
RegexCharClass
.IsBoundaryWordChar(runtext![index]));
417
return ((uint)indexM1 < (uint)inputSpan.Length &&
RegexCharClass
.IsBoundaryWordChar(inputSpan[indexM1])) !=
418
((uint)index < (uint)inputSpan.Length &&
RegexCharClass
.IsBoundaryWordChar(inputSpan[index]));
427
return (uint)indexMinus1 >= (uint)inputSpan.Length || !
RegexCharClass
.IsBoundaryWordChar(inputSpan[indexMinus1]);
434
(uint)index >= (uint)inputSpan.Length || !
RegexCharClass
.IsBoundaryWordChar(inputSpan[index]);
437
internal static bool IsWordChar(char ch) =>
RegexCharClass
.IsWordChar(ch);
441
return (index > startpos &&
RegexCharClass
.IsECMAWordChar(runtext![index - 1])) !=
442
(index < endpos &&
RegexCharClass
.IsECMAWordChar(runtext![index]));
448
return ((uint)indexM1 < (uint)inputSpan.Length &&
RegexCharClass
.IsECMAWordChar(inputSpan[indexM1])) !=
449
((uint)index < (uint)inputSpan.Length &&
RegexCharClass
.IsECMAWordChar(inputSpan[index]));
455
string charClass =
RegexCharClass
.ConvertOldStringsToClass(set, category);
456
return
RegexCharClass
.CharInClass(ch, charClass);
461
return
RegexCharClass
.CharInClass(ch, charClass);
System\Text\RegularExpressions\Symbolic\CharSetSolver.cs (2)
138
var
rcc = new RegexCharClass();
143
return
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>
355
bool negate =
RegexCharClass
.IsNegated(set);
361
List<(char First, char Last)>? ranges =
RegexCharClass
.ComputeRanges(set);
381
int setLength = set[
RegexCharClass
.SetLengthIndex];
382
int catLength = set[
RegexCharClass
.CategoryLengthIndex];
383
int catStart = setLength +
RegexCharClass
.SetStartIndex;
523
Debug.Assert(Enum.IsDefined(code) || code == (UnicodeCategory)(
RegexCharClass
.SpaceConst - 1), $"Unknown category: {code}");
524
return code == (UnicodeCategory)(
RegexCharClass
.SpaceConst - 1) ?