19 writes to Str
System.Text.RegularExpressions (19)
System\Text\RegularExpressions\RegexNode.cs (19)
68Str = str; 190Str = null; 198Str = new string(Ch, N); 964Str = null; 969Str = null; 979Str = null; 997Str = RegexCharClass.AnyClass; 1002Str = RegexCharClass.NotDigitClass; 1005Str = RegexCharClass.NotSpaceClass; 1008Str = RegexCharClass.NotWordClass; 1156prev.Str = prevCharClass.ToStringClass(); 1448node.Str = null; 1454node.Str = null; 1458node.Str = node.Str.Substring(startingSpan.Length); 1778prev.Str = prev.Ch.ToString(); 1781prev.Str = (optionsAt & RegexOptions.RightToLeft) == 0 ? 1924nextNode.Str = null; 1928nextNode.Str = nextNode.Str.Substring(matchingCharsInMulti); 3071Str = new string(Ch, max);
150 references to Str
System.Text.RegularExpressions (150)
System\Text\RegularExpressions\RegexCompiler.cs (22)
1358EmitMatchCharacterClass(target.LoopNode.Str!); 1467int length = node.Kind == RegexNodeKind.Multi ? node.Str!.Length : 1; 1946int numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars); 2090return multi.Str!.Length == 2 ? 2091new(RegexNodeKind.One, multi.Options, multi.Str[1]) : 2092new(RegexNodeKind.Multi, multi.Options, multi.Str.Substring(1)); 3232EmitMatchCharacterClass(node.Str); 3464EmitMultiCharString(node.Str!, emitLengthCheck, (node.Options & RegexOptions.RightToLeft) != 0); 3974node.Str == RegexCharClass.AnyClass && 4502if (node.IsSetFamily && node.Str == RegexCharClass.AnyClass) 4644EmitMatchCharacterClass(node.Str); 4679else if (node.IsSetFamily && maxIterations == int.MaxValue && node.Str == RegexCharClass.AnyClass) 4759EmitMatchCharacterClass(node.Str); 4881EmitMatchCharacterClass(node.Str); 5363literalLength = node.Str!.Length; 5376if (RegexCharClass.TryGetSingleRange(node.Str, out _, out _) || 5377RegexCharClass.GetSetChars(node.Str, setChars) > 0) 5398Ldstr(node.Str!); 5426bool negated = RegexCharClass.IsNegated(node.Str) ^ negate; 5430if (RegexCharClass.TryGetSingleRange(node.Str, out char lowInclusive, out char highInclusive) && 5447int setCharsCount = RegexCharClass.GetSetChars(node.Str, setChars); 5605Ldc((root.Kind == RegexNodeKind.Multi ? root.Str!.Length : 1) * (!rtl ? 1 : -1));
System\Text\RegularExpressions\RegexFindOptimizations.cs (1)
841while ((uint)--prev < (uint)slice.Length && RegexCharClass.CharInClass(slice[prev], loopNode.Str!, ref _asciiLookups![0])) ;
System\Text\RegularExpressions\RegexNode.cs (95)
95new RegexNode(Kind, Options, Str!) : 332Debug.Assert(node.Str is not null, "Expect non-null multi string"); 333Debug.Assert(node.Str.Length >= 2, $"Expected {node.Str} to be at least two characters"); 340Debug.Assert(!string.IsNullOrEmpty(node.Str), $"Expected non-null, non-empty string for {node.Kind}."); 344Debug.Assert(node.Str is null, $"Expected null string for {node.Kind}, got \"{node.Str}\"."); 959Debug.Assert(!string.IsNullOrEmpty(Str)); 961if (RegexCharClass.IsEmpty(Str)) 966else if (RegexCharClass.IsSingleton(Str)) 968Ch = RegexCharClass.SingletonChar(Str); 976else if (RegexCharClass.IsSingletonInverse(Str)) 978Ch = RegexCharClass.SingletonChar(Str); 988switch (Str) 1113if (!wasLastSet || optionsLast != optionsAt || lastNodeCannotMerge || !RegexCharClass.IsMergeable(at.Str!)) 1116lastNodeCannotMerge = !RegexCharClass.IsMergeable(at.Str!); 1142prevCharClass = RegexCharClass.Parse(prev.Str!); 1151RegexCharClass atCharClass = RegexCharClass.Parse(at.Str!); 1239required.Str != other.Str) 1354scoped ReadOnlySpan<char> startingSpan = startingNode.Str.AsSpan(); 1390Debug.Assert(startingNode.Str!.Length > 0); 1392int minLength = Math.Min(startingSpan.Length, startingNode.Str.Length); 1394while (c < minLength && startingSpan[c] == startingNode.Str[c]) c++; 1444Debug.Assert(node.Str.AsSpan().StartsWith(startingSpan, StringComparison.Ordinal)); 1445if (node.Str!.Length == startingSpan.Length) 1450else if (node.Str.Length - 1 == startingSpan.Length) 1453node.Ch = node.Str[node.Str.Length - 1]; 1458node.Str = node.Str.Substring(startingSpan.Length); 1500return IsOneFamily ? Ch : Str![0]; 1551if (RegexCharClass.IsNegated(startingLiteralNode.Str!) || 1552(numChars = RegexCharClass.GetSetChars(startingLiteralNode.Str!, setChars)) == 0) 1625if (RegexCharClass.TryGetSingleRange(node.Str!, out char lowInclusive, out char highInclusive) && 1629return new StartingLiteralData(range: (lowInclusive, highInclusive), negated: RegexCharClass.IsNegated(node.Str!)); 1634if ((numChars = RegexCharClass.GetSetChars(node.Str!, setChars)) != 0) 1636return new StartingLiteralData(setChars: setChars.Slice(0, numChars).ToString(), negated: RegexCharClass.IsNegated(node.Str!)); 1641return new StartingLiteralData(@string: node.Str); 1782((at.Kind == RegexNodeKind.One) ? $"{prev.Str}{at.Ch}" : prev.Str + at.Str) : 1783((at.Kind == RegexNodeKind.One) ? $"{at.Ch}{prev.Str}" : at.Str + prev.Str); 1847case RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy when nextNode.Kind == currentNode.Kind && currentNode.Str == nextNode.Str: 1874case RegexNodeKind.Setloop or RegexNodeKind.Setlazy when nextNode.Kind == RegexNodeKind.Set && currentNode.Str == nextNode.Str: 1891currentNode.Ch == nextNode.Str![0]: 1896while (matchingCharsInMulti < nextNode.Str.Length && currentNode.Ch == nextNode.Str[matchingCharsInMulti]) 1911if (nextNode.Str.Length == matchingCharsInMulti) 1919Debug.Assert(matchingCharsInMulti < nextNode.Str.Length); 1920if (nextNode.Str.Length - matchingCharsInMulti == 1) 1923nextNode.Ch = nextNode.Str[nextNode.Str.Length - 1]; 1928nextNode.Str = nextNode.Str.Substring(matchingCharsInMulti); 1942case RegexNodeKind.Set when (nextNode.Kind is RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic or RegexNodeKind.Setlazy) && currentNode.Str == nextNode.Str: 1956case RegexNodeKind.Set when nextNode.Kind == RegexNodeKind.Set && currentNode.Str == nextNode.Str: 2417case RegexNodeKind.Set when !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2420case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2421case RegexNodeKind.Multi when node.Ch != subsequent.Str![0]: 2432case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(node.Ch, subsequent.Str!): 2447case RegexNodeKind.Multi when node.Ch == subsequent.Str![0]: 2464case RegexNodeKind.One when !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2465case RegexNodeKind.Set when !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2466case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M > 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2467case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2468case RegexNodeKind.Multi when !RegexCharClass.CharInClass(subsequent.Str![0], node.Str!): 2470case RegexNodeKind.EndZ or RegexNodeKind.Eol when !RegexCharClass.CharInClass('\n', node.Str!): 2471case RegexNodeKind.Boundary when node.M > 0 && RegexCharClass.IsKnownWordClassSubset(node.Str!): 2472case RegexNodeKind.NonBoundary when node.M > 0 && node.Str is RegexCharClass.NotWordClass or RegexCharClass.NotDigitClass: 2473case RegexNodeKind.ECMABoundary when node.M > 0 && node.Str is RegexCharClass.ECMAWordClass or RegexCharClass.ECMADigitClass: 2474case RegexNodeKind.NonECMABoundary when node.M > 0 && node.Str is RegexCharClass.NotECMAWordClass or RegexCharClass.NotDigitClass: 2477case RegexNodeKind.Onelazy or RegexNodeKind.Oneloop or RegexNodeKind.Oneloopatomic when subsequent.M == 0 && !RegexCharClass.CharInClass(subsequent.Ch, node.Str!): 2478case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !RegexCharClass.MayOverlap(node.Str!, subsequent.Str!): 2512case RegexNodeKind.Set when !MayOverlapStartingOrEndingSet(subsequent.Str!): 2514case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M > 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!): 2515case RegexNodeKind.Multi when !CharInStartingOrEndingSet(subsequent.Str![0]): 2525case RegexNodeKind.Setlazy or RegexNodeKind.Setloop or RegexNodeKind.Setloopatomic when subsequent.M == 0 && !MayOverlapStartingOrEndingSet(subsequent.Str!): 2661return Str!.Length; 2774return Str!.Length; 2937if (!Ascii.IsValid(child.Str) || 2938RegexCharClass.ParticipatesInCaseConversion(child.Str.AsSpan())) 2943vsb.Append(child.Str); 2950if (!RegexCharClass.SetContainsAsciiOrdinalIgnoreCaseCharacter(child.Str!, twoChars)) 3208[MemberNotNullWhen(true, nameof(Str))] 3289foreach (char c in Str!) 3299sb.Append(' ').Append(RegexCharClass.DescribeSet(Str!));
System\Text\RegularExpressions\RegexNodeKind.cs (5)
22/// <remarks>The <see cref="RegexCharClass"/> set string is specified in <see cref="RegexNode.Str"/>.</remarks> 26/// <remarks>The characters are specified in <see cref="RegexNode.Str"/>. This is purely a representational optimization, equivalent to multiple <see cref="One"/> nodes concatenated together.</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\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!))
System\Text\RegularExpressions\RegexReplacement.cs (1)
51vsb.Append(child.Str!);
System\Text\RegularExpressions\RegexWriter.cs (3)
407int stringCode = StringCode(node.Str!); 420Emit((RegexOpcode)node.Kind | bits, StringCode(node.Str!)); 424Emit((RegexOpcode)node.Kind | bits, StringCode(node.Str!));
System\Text\RegularExpressions\Symbolic\RegexNodeConverter.cs (3)
72string? str = node.Str; 125string? set = node.Str; 314string? set = node.Str;