19 writes to Str
System.Text.RegularExpressions.Generator (19)
parent\src\System\Text\RegularExpressions\RegexNode.cs (19)
68Str = str; 190Str = null; 198Str = new string(Ch, N); 1019Str = null; 1024Str = null; 1034Str = null; 1052Str = RegexCharClass.AnyClass; 1057Str = RegexCharClass.NotDigitClass; 1060Str = RegexCharClass.NotSpaceClass; 1063Str = RegexCharClass.NotWordClass; 1211prev.Str = prevCharClass.ToStringClass(); 1507node.Str = null; 1513node.Str = null; 1517node.Str = node.Str.Substring(startingSpan.Length); 1837prev.Str = prev.Ch.ToString(); 1840prev.Str = (optionsAt & RegexOptions.RightToLeft) == 0 ? 1983nextNode.Str = null; 1987nextNode.Str = nextNode.Str.Substring(matchingCharsInMulti); 3304Str = new string(Ch, max);
140 references to Str
System.Text.RegularExpressions.Generator (140)
parent\src\System\Text\RegularExpressions\RegexNode.cs (92)
95new RegexNode(Kind, Options, Str!) : 1014Debug.Assert(!string.IsNullOrEmpty(Str)); 1016if (RegexCharClass.IsEmpty(Str)) 1021else if (RegexCharClass.IsSingleton(Str)) 1023Ch = RegexCharClass.SingletonChar(Str); 1031else if (RegexCharClass.IsSingletonInverse(Str)) 1033Ch = RegexCharClass.SingletonChar(Str); 1043switch (Str) 1168if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !RegexCharClass.IsMergeable(at.Str!)) 1171lastNodeCannotMerge = !RegexCharClass.IsMergeable(at.Str!); 1197prevCharClass = RegexCharClass.Parse(prev.Str!); 1206RegexCharClass atCharClass = RegexCharClass.Parse(at.Str!); 1287required.Str != other.Str) 1413scoped ReadOnlySpan<char> startingSpan = startingNode.Str.AsSpan(); 1449Debug.Assert(startingNode.Str!.Length > 0); 1451int minLength = Math.Min(startingSpan.Length, startingNode.Str.Length); 1453while (c < minLength && startingSpan[c] == startingNode.Str[c]) c++; 1503Debug.Assert(node.Str.AsSpan().StartsWith(startingSpan, StringComparison.Ordinal)); 1504if (node.Str!.Length == startingSpan.Length) 1509else if (node.Str.Length - 1 == startingSpan.Length) 1512node.Ch = node.Str[node.Str.Length - 1]; 1517node.Str = node.Str.Substring(startingSpan.Length); 1559return IsOneFamily ? Ch : Str![0]; 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!)); 1700return new StartingLiteralData(@string: node.Str); 1841((at.Kind == RegexNodeKind.One) ? $"{prev.Str}{at.Ch}" : prev.Str + at.Str) : 1842((at.Kind == RegexNodeKind.One) ? $"{at.Ch}{prev.Str}" : at.Str + prev.Str); 1906case RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy when nextNode.Kind == currentNode.Kind && currentNode.Str == nextNode.Str: 1933case RegexNodeKind.Setloop or RegexNodeKind.Setlazy when nextNode.Kind == RegexNodeKind.Set && currentNode.Str == nextNode.Str: 1950currentNode.Ch == nextNode.Str![0]: 1955while (matchingCharsInMulti < nextNode.Str.Length && currentNode.Ch == nextNode.Str[matchingCharsInMulti]) 1970if (nextNode.Str.Length == matchingCharsInMulti) 1978Debug.Assert(matchingCharsInMulti < nextNode.Str.Length); 1979if (nextNode.Str.Length - matchingCharsInMulti == 1) 1982nextNode.Ch = nextNode.Str[nextNode.Str.Length - 1]; 1987nextNode.Str = nextNode.Str.Substring(matchingCharsInMulti); 2001case RegexNodeKind.Set when (nextNode.Kind is RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy) && currentNode.Str == nextNode.Str: 2015case RegexNodeKind.Set when nextNode.Kind == RegexNodeKind.Set && currentNode.Str == nextNode.Str: 2414case RegexNodeKind.Set when loopNode.Kind is RegexNodeKind.Setloop && RegexCharClass.IsSubsetOf(literal.Str!, loopNode.Str!): // e.g. \d+[0-9]\s 2426case RegexNodeKind.Multi when CharInLoopSet(loopNode, literal.Str![0]) && !CharInLoopSet(loopNode, literal.Str[1]): 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!): 2544case RegexNodeKind.Multi when node.Ch != subsequent.Str![0]: 2555case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2570case RegexNodeKind.Multi when node.Ch == subsequent.Str![0]: 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!): 2635case RegexNodeKind.Set when !MayOverlapStartingOrEndingSet(subsequent.Str!): 2637case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!): 2638case RegexNodeKind.Multi when !CharInStartingOrEndingSet(subsequent.Str![0]): 2648case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!): 2851return Str!.Length; 2964return Str!.Length; 3150if (!Ascii.IsValid(child.Str) || 3151RegexCharClass.ParticipatesInCaseConversion(child.Str.AsSpan())) 3156vsb.Append(child.Str); 3163if (!RegexCharClass.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars)) 3449[MemberNotNullWhen(true, nameof(Str))]
parent\src\System\Text\RegularExpressions\RegexPrefixAnalyzer.cs (20)
129sb.Append(node.Str); 136foreach (char c in node.Str!) 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)) 428vsb.Append(node.Str); 623string s = node.Str!; 636results.Add(new RegexFindOptimizations.FixedDistanceSet(null, node.Str!, distance++)); 647results.Add(new RegexFindOptimizations.FixedDistanceSet(null, node.Str!, distance++)); 986cc = RegexCharClass.Parse(node.Str!); 989else if (cc.CanMerge && RegexCharClass.Parse(node.Str!) is { CanMerge: true } setCc) 1005cc.AddChar(node.Str![firstChar ? 0 : node.Str.Length - 1]); 1184RegexCharClass.CharInClass(prefix[0], firstChild.Str!) ? null : 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!))
RegexGenerator.Emitter.cs (28)
784writer.WriteLine($"int end = base.runtextpos = start {(!rtl ? "+" : "-")} {(root.Kind == RegexNodeKind.Multi ? root.Str!.Length : 1)};"); 1509writer.Write($"// The pattern begins with an atomic loop for {DescribeSet(target.LoopNode.Str!)}, followed by "); 1557using (EmitBlock(writer, $"while ((uint)prev < (uint)slice.Length && {MatchCharacterClass("slice[prev]", target.LoopNode.Str!, negate: false, additionalDeclarations, requiredHelpers)})")) 1896int numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars); 1979return multi.Str!.Length == 2 ? 1980new(RegexNodeKind.One, multi.Options, multi.Str[1]) : 1981new(RegexNodeKind.Multi, multi.Options, multi.Str.Substring(1)); 3123EmitMultiCharString(child.Str!, emitLengthCheck: false, clauseOnly: true, rightToLeft: false); 3213MatchCharacterClass(expr, node.Str!, negate: true, additionalDeclarations, requiredHelpers) : 3353Debug.Assert(node.Str is not null); 3354EmitMultiCharString(node.Str, emitLengthCheck, clauseOnly: false, (node.Options & RegexOptions.RightToLeft) != 0); 3505$"{charAccessExpr} != {Literal(literalNode.Str![0])}", 3507$"!{MatchCharacterClass(charAccessExpr, literalNode.Str!, negate: false, additionalDeclarations, requiredHelpers)}", 3748node.Str == RegexCharClass.AnyClass && 4163else if (node.IsSetFamily && node.Str == RegexCharClass.AnyClass) 4278if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 4290MatchCharacterClass(expr, node.Str!, negate: false, additionalDeclarations, requiredHelpers) : 4301else if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 4335MatchCharacterClass(expr, node.Str!, negate: false, additionalDeclarations, requiredHelpers) : 4398MatchCharacterClass(expr, node.Str!, negate: false, additionalDeclarations, requiredHelpers) : 5067indexOfExpr = $"{last}IndexOf({Literal(node.Str!)})"; 5068literalLength = node.Str!.Length; 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)); 5604RegexNodeKind.Multi => $"Match the string {Literal(node.Str!)}{direction}.", 5615RegexNodeKind.Set => $"Match {DescribeSet(node.Str!)}{direction}.", 5616RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy => $"Match {DescribeSet(node.Str!)} {DescribeLoop(node, rm)}{direction}.",