Description
in compiled
Use (?((?'-1'))|((?'1'\S)+|(?'1'\s)))+(?!(?'-1')) to match abc, results are "","","".
It's different with interpretor and source generater.
This situation occured in .NET7、.NET8、.NET9、.NET10, work normally in .NET5 and .NET6.
Reproduction Steps
usingSystem;usingSystem.Text.RegularExpressions;{varpattern=@"(?((?'-1'))|(?'outer'(?'1'\S)+|(?'1'\s)))+(?!(?'-1'))";pattern=@"(?((?'-1'))|(?:(?'1'\S)+|(?'1'\s)))+(?!(?'-1'))";pattern=@"(?((?'-1'))|((?'1'\S)+|(?'1'\s)))+(?!(?'-1'))";varinput="abc";varregexCompiled=newRegex(pattern,RegexOptions.Compiled);varregexInterpreted=newRegex(pattern,RegexOptions.None);Console.WriteLine($"----------Compiled results count:{regexCompiled.Matches(input).Count}------------");foreach(MatchmhinregexCompiled.Matches(input)){Console.WriteLine($"Compiled: [{mh.Value}]");}Console.WriteLine($"----------Interpreted results count:{regexInterpreted.Matches(input).Count}------------");foreach(MatchmhinregexInterpreted.Matches(input)){Console.WriteLine($"Interpreted: [{mh.Value}]");}}Console.WriteLine("#################################################################");{varpattern=@"(?((?'-1'){6})|((?'1'(?'2'\S))+|(?'1'(?'2'\s))))+(?!(?'-1'))";varinput="it not";varregexCompiled=newRegex(pattern,RegexOptions.Compiled);varlen=regexCompiled.Matches(input).Count;}Expected behavior
----------Compiled results count:0------------
----------Interpreted results count:0------------
#################################################################
Actual behavior
----------Compiled results count:3------------
Compiled: []
Compiled: []
Compiled: []
----------Interpreted results count:0------------
#################################################################
Unhandled exception. System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
at Regex2_TryMatchAtCurrentPosition(RegexRunner, ReadOnlySpan`1)
at Regex2_Scan(RegexRunner, ReadOnlySpan`1)
at System.Text.RegularExpressions.Regex.ScanInternal(RegexRunnerMode mode, Boolean reuseMatchObject, String input, Int32 beginning, RegexRunner runner, ReadOnlySpan`1 span, Boolean returnNullIfReuseMatchObject)
at System.Text.RegularExpressions.Regex.RunSingleMatch(RegexRunnerMode mode, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
at System.Text.RegularExpressions.MatchCollection.get_Count()
at Program.<Main>$(String[] args)
Regression?
No. Occur in .NET8, too
Known Workarounds
No response
Configuration
No response
Other information
No response
Description
in compiled
Use
(?((?'-1'))|((?'1'\S)+|(?'1'\s)))+(?!(?'-1'))to matchabc, results are "","","".It's different with interpretor and source generater.
This situation occured in .NET7、.NET8、.NET9、.NET10, work normally in .NET5 and .NET6.
Reproduction Steps
Expected behavior
Actual behavior
Regression?
No. Occur in .NET8, too
Known Workarounds
No response
Configuration
No response
Other information
No response