diff --git a/src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs b/src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs index 8d8c5c9ab753d0..caf09376fe9151 100644 --- a/src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs +++ b/src/libraries/System.Text.RegularExpressions/gen/RegexGenerator.Emitter.cs @@ -3743,7 +3743,8 @@ void EmitLazy(RegexNode node) { startingPos = ReserveName("lazyloop_starting_pos"); sawEmpty = ReserveName("lazyloop_empty_seen"); - writer.WriteLine($"int {startingPos} = pos, {sawEmpty} = 0; // the lazy loop may match empty iterations"); + additionalDeclarations.Add($"int {startingPos} = 0, {sawEmpty} = 0;"); + writer.WriteLine($"{startingPos} = {sawEmpty} = 0; // the lazy loop may match empty iterations"); } // If the min count is 0, start out by jumping right to what's after the loop. Backtracking diff --git a/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/Regex.Match.Tests.cs b/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/Regex.Match.Tests.cs index b720936b59b995..2fd14051bba32c 100644 --- a/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/Regex.Match.Tests.cs +++ b/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/Regex.Match.Tests.cs @@ -277,6 +277,14 @@ public static IEnumerable Match_MemberData() yield return (@"(abcd*?)+e", "abcde", RegexOptions.None, 0, 5, true, "abcde"); yield return (@"(abcd*)+?e", "abcde", RegexOptions.None, 0, 5, true, "abcde"); yield return (@"(abcd*?)+?e", "abcde", RegexOptions.None, 0, 5, true, "abcde"); + yield return (@"(?:m(?:((e)?)??)|a)\b", "you m you", RegexOptions.None, 0, 9, true, "m"); + yield return (@"(?:m(?:((e)?)??)|a)\b", "you me you", RegexOptions.None, 0, 10, true, "me"); + yield return (@"(?:m(?:((e)?)??)|a)\b", "you a you", RegexOptions.None, 0, 9, true, "a"); + yield return (@"(?:m(?:((e)?)??)|a)\b", "you and you", RegexOptions.None, 0, 11, false, ""); + yield return (@"(?:m(?:|(e)?)|a)\b", "you m you", RegexOptions.None, 0, 9, true, "m"); + yield return (@"(?:m(?:|(e)?)|a)\b", "you me you", RegexOptions.None, 0, 10, true, "me"); + yield return (@"(?:m(?:|(e)?)|a)\b", "you a you", RegexOptions.None, 0, 9, true, "a"); + yield return (@"(?:m(?:|(e)?)|a)\b", "you and you", RegexOptions.None, 0, 11, false, ""); // Testing selected FindOptimizations finds the right prefix yield return (@"(^|a+)bc", " aabc", RegexOptions.None, 0, 5, true, "aabc");