/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/CSharpTest2/EmbeddedLanguages/RegularExpressions/CSharpRegexParserTests_ReferenceTests.cs
7 055 строк
287 KB
Cyrus Najmabadi
Cleanup test methods
24 июл 2025, 11:15
24 июл 2025, 11:15
9b3e554
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Text.RegularExpressions; using Xunit; namespace Microsoft.CodeAnalysis.CSharp.UnitTests.EmbeddedLanguages.RegularExpressions; // All these tests came from the example at: // https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference public sealed partial class CSharpRegexParserTests { [Fact] public void ReferenceTest0() => Test(""" @"[aeiou]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>aeiou</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="[aeiou]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest1() => Test(""" @"(?<duplicateWord>\w+)\s\k<duplicateWord>\W(?<nextWord>\w+)" """, """ <Tree> <CompilationUnit> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="duplicateWord">duplicateWord</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <KCaptureEscape> <BackslashToken>\</BackslashToken> <TextToken>k</TextToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="duplicateWord">duplicateWord</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> </KCaptureEscape> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="nextWord">nextWord</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..68)" Text="(?<duplicateWord>\w+)\s\k<duplicateWord>\W(?<nextWord>\w+)" /> <Capture Name="1" Span="[10..31)" Text="(?<duplicateWord>\w+)" /> <Capture Name="2" Span="[52..68)" Text="(?<nextWord>\w+)" /> <Capture Name="duplicateWord" Span="[10..31)" Text="(?<duplicateWord>\w+)" /> <Capture Name="nextWord" Span="[52..68)" Text="(?<nextWord>\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest2() => Test(""" @"((?<One>abc)\d+)?(?<Two>xyz)(.*)" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="One">One</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <Text> <TextToken>abc</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="Two">Two</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <Text> <TextToken>xyz</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..42)" Text="((?<One>abc)\d+)?(?<Two>xyz)(.*)" /> <Capture Name="1" Span="[10..26)" Text="((?<One>abc)\d+)" /> <Capture Name="2" Span="[38..42)" Text="(.*)" /> <Capture Name="3" Span="[11..22)" Text="(?<One>abc)" /> <Capture Name="4" Span="[27..38)" Text="(?<Two>xyz)" /> <Capture Name="One" Span="[11..22)" Text="(?<One>abc)" /> <Capture Name="Two" Span="[27..38)" Text="(?<Two>xyz)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest3() => Test(""" @"(\w+)\s(\1)" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="(\w+)\s(\1)" /> <Capture Name="1" Span="[10..15)" Text="(\w+)" /> <Capture Name="2" Span="[17..21)" Text="(\1)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest4() => Test(""" @"\Bqu\w+" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>B</TextToken> </AnchorEscape> <Text> <TextToken>qu</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="\Bqu\w+" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest5() => Test(""" @"\bare\w*\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>are</TextToken> </Text> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="\bare\w*\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest6() => Test(""" @"\G(\w+\s?\w*),?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>G</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..25)" Text="\G(\w+\s?\w*),?" /> <Capture Name="1" Span="[12..23)" Text="(\w+\s?\w*)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest7() => Test(""" @"\D+(?<digit>\d+)\D+(?<digit>\d+)?" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>D</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="digit">digit</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>D</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="digit">digit</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..43)" Text="\D+(?<digit>\d+)\D+(?<digit>\d+)?" /> <Capture Name="1" Span="[13..26)" Text="(?<digit>\d+)" /> <Capture Name="digit" Span="[13..26)" Text="(?<digit>\d+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest8() => Test(""" @"(\s\d{4}(-(\d{4}|present))?,?)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>-</TextToken> </Text> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>&#124;present</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..46)" Text="(\s\d{4}(-(\d{4}&#124;present))?,?)+" /> <Capture Name="1" Span="[10..45)" Text="(\s\d{4}(-(\d{4}&#124;present))?,?)" /> <Capture Name="2" Span="[18..41)" Text="(-(\d{4}&#124;present))" /> <Capture Name="3" Span="[20..40)" Text="(\d{4}&#124;present)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest9() => Test(""" @"^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OpenRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CommaToken>,</CommaToken> <CloseBraceToken>}</CloseBraceToken> </OpenRangeNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <Text> <TextToken>,</TextToken> </Text> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <Text> <TextToken>,</TextToken> </Text> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>-</TextToken> </Text> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <BarToken>|</BarToken> <Sequence> <Text> <TextToken>present</TextToken> </Text> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..72)" Text="^((\w+(\s?)){2,}),\s(\w+\s\w+),(\s\d{4}(-(\d{4}|present))?,?)+" /> <Capture Name="1" Span="[11..27)" Text="((\w+(\s?)){2,})" /> <Capture Name="2" Span="[12..22)" Text="(\w+(\s?))" /> <Capture Name="3" Span="[16..21)" Text="(\s?)" /> <Capture Name="4" Span="[30..40)" Text="(\w+\s\w+)" /> <Capture Name="5" Span="[41..71)" Text="(\s\d{4}(-(\d{4}|present))?,?)" /> <Capture Name="6" Span="[49..67)" Text="(-(\d{4}|present))" /> <Capture Name="7" Span="[51..66)" Text="(\d{4}|present)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest10() => Test(""" @"^[0-9-[2468]]+$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>2468</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..25)" Text="^[0-9-[2468]]+$" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest11() => Test(""" @"[a-z-[0-9]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>a</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>z</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="[a-z-[0-9]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest12() => Test(""" @"[\p{IsBasicLatin}-[\x00-\x7F]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>IsBasicLatin</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <HexEscape> <BackslashToken>\</BackslashToken> <TextToken>x</TextToken> <TextToken>00</TextToken> </HexEscape> <MinusToken>-</MinusToken> <HexEscape> <BackslashToken>\</BackslashToken> <TextToken>x</TextToken> <TextToken>7F</TextToken> </HexEscape> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..40)" Text="[\p{IsBasicLatin}-[\x00-\x7F]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest13() => Test(""" @"[\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <UnicodeEscape> <BackslashToken>\</BackslashToken> <TextToken>u</TextToken> <TextToken>0000</TextToken> </UnicodeEscape> <MinusToken>-</MinusToken> <UnicodeEscape> <BackslashToken>\</BackslashToken> <TextToken>u</TextToken> <TextToken>FFFF</TextToken> </UnicodeEscape> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>IsGreek</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <HexEscape> <BackslashToken>\</BackslashToken> <TextToken>x</TextToken> <TextToken>85</TextToken> </HexEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..50)" Text="[\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest14() => Test(""" @"[a-z-[d-w-[m-o]]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>a</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>z</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>d</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>w</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>m</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>o</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="[a-z-[d-w-[m-o]]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest15() => Test(""" @"((\w+(\s?)){2,}" """, $$""" <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OpenRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CommaToken>,</CommaToken> <CloseBraceToken>}</CloseBraceToken> </OpenRangeNumericQuantifier> </Sequence> <CloseParenToken /> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Diagnostics> <Diagnostic Message="{{FeaturesResources.Not_enough_close_parens}}" Span="[25..25)" Text="" /> </Diagnostics> <Captures> <Capture Name="0" Span="[10..25)" Text="((\w+(\s?)){2,}" /> <Capture Name="1" Span="[10..25)" Text="((\w+(\s?)){2,}" /> <Capture Name="2" Span="[11..21)" Text="(\w+(\s?))" /> <Capture Name="3" Span="[15..20)" Text="(\s?)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest16() => Test(""" @"[a-z-[djp]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>a</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>z</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>djp</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="[a-z-[djp]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest17() => Test(""" @"^[^<>]*(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*(?(Open)(?!))$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken><</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <BalancingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Close">Close</CaptureNameToken> <MinusToken>-</MinusToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken>></TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </BalancingGrouping> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ConditionalCaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OpenParenToken>(</OpenParenToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <CloseParenToken>)</CloseParenToken> <Sequence> <NegativeLookaheadGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ExclamationToken>!</ExclamationToken> <Sequence /> <CloseParenToken>)</CloseParenToken> </NegativeLookaheadGrouping> </Sequence> <CloseParenToken>)</CloseParenToken> </ConditionalCaptureGrouping> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..78)" Text="^[^<>]*(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*(?(Open)(?!))$" /> <Capture Name="1" Span="[17..63)" Text="(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)" /> <Capture Name="2" Span="[18..36)" Text="((?'Open'<)[^<>]*)" /> <Capture Name="3" Span="[37..61)" Text="((?'Close-Open'>)[^<>]*)" /> <Capture Name="4" Span="[19..29)" Text="(?'Open'<)" /> <Capture Name="5" Span="[38..54)" Text="(?'Close-Open'>)" /> <Capture Name="Close" Span="[38..54)" Text="(?'Close-Open'>)" /> <Capture Name="Open" Span="[19..29)" Text="(?'Open'<)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest18() => Test(""" @"((?'Close-Open'>)[^<>]*)+" """, $""" <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <BalancingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Close">Close</CaptureNameToken> <MinusToken>-</MinusToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken>></TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </BalancingGrouping> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Diagnostics> <Diagnostic Message="{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "Open")}" Span="[20..24)" Text="Open" /> </Diagnostics> <Captures> <Capture Name="0" Span="[10..35)" Text="((?'Close-Open'>)[^<>]*)+" /> <Capture Name="1" Span="[10..34)" Text="((?'Close-Open'>)[^<>]*)" /> <Capture Name="2" Span="[11..27)" Text="(?'Close-Open'>)" /> <Capture Name="Close" Span="[11..27)" Text="(?'Close-Open'>)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest19() => Test(""" @"(\w)\1+.\b" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="(\w)\1+.\b" /> <Capture Name="1" Span="[10..14)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest20() => Test(""" @"\d{4}\b" """, """ <Tree> <CompilationUnit> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="\d{4}\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest21() => Test(""" @"\d{1,2}," """, """ <Tree> <CompilationUnit> <Sequence> <ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <Text> <TextToken>,</TextToken> </Text> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..18)" Text="\d{1,2}," /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest22() => Test(""" @"(?<!(Saturday|Sunday) )\b\w+ \d{1,2}, \d{4}\b" """, """ <Tree> <CompilationUnit> <Sequence> <NegativeLookbehindGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <ExclamationToken>!</ExclamationToken> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <Text> <TextToken>Saturday</TextToken> </Text> </Sequence> <BarToken>|</BarToken> <Sequence> <Text> <TextToken>Sunday</TextToken> </Text> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <Text> <TextToken> </TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </NegativeLookbehindGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <Text> <TextToken> </TextToken> </Text> <ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <Text> <TextToken>, </TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..55)" Text="(?<!(Saturday|Sunday) )\b\w+ \d{1,2}, \d{4}\b" /> <Capture Name="1" Span="[14..31)" Text="(Saturday|Sunday)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest23() => Test(""" @"(?<=\b20)\d{2}\b" """, """ <Tree> <CompilationUnit> <Sequence> <PositiveLookbehindGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <EqualsToken>=</EqualsToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>20</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </PositiveLookbehindGrouping> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="(?<=\b20)\d{2}\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest24() => Test(""" @"\b\w+\b(?!\p{P})" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NegativeLookaheadGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ExclamationToken>!</ExclamationToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </NegativeLookaheadGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="\b\w+\b(?!\p{P})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest25() => Test(""" @"(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken><</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <BalancingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Close">Close</CaptureNameToken> <MinusToken>-</MinusToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken>></TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </BalancingGrouping> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..57)" Text="(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)*" /> <Capture Name="1" Span="[10..56)" Text="(((?'Open'<)[^<>]*)+((?'Close-Open'>)[^<>]*)+)" /> <Capture Name="2" Span="[11..29)" Text="((?'Open'<)[^<>]*)" /> <Capture Name="3" Span="[30..54)" Text="((?'Close-Open'>)[^<>]*)" /> <Capture Name="4" Span="[12..22)" Text="(?'Open'<)" /> <Capture Name="5" Span="[31..47)" Text="(?'Close-Open'>)" /> <Capture Name="Close" Span="[31..47)" Text="(?'Close-Open'>)" /> <Capture Name="Open" Span="[12..22)" Text="(?'Open'<)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest26() => Test(""" @"\b(?!un)\w+\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NegativeLookaheadGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ExclamationToken>!</ExclamationToken> <Sequence> <Text> <TextToken>un</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </NegativeLookaheadGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="\b(?!un)\w+\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest27() => Test(""" @"\b(?ix: d \w+)\s" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NestedOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>ix</OptionsToken> <ColonToken>:</ColonToken> <Sequence> <Text> <TextToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NestedOptionsGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="\b(?ix: d \w+)\s" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest28() => Test(""" @"(?:\w+)" """, """ <Tree> <CompilationUnit> <Sequence> <NonCapturingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ColonToken>:</ColonToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NonCapturingGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="(?:\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest29() => Test(""" @"(?:\b(?:\w+)\W*)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <NonCapturingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ColonToken>:</ColonToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NonCapturingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ColonToken>:</ColonToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NonCapturingGrouping> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NonCapturingGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="(?:\b(?:\w+)\W*)+" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest30() => Test(""" @"(?:\b(?:\w+)\W*)+\." """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <NonCapturingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ColonToken>:</ColonToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NonCapturingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <ColonToken>:</ColonToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NonCapturingGrouping> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NonCapturingGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..29)" Text="(?:\b(?:\w+)\W*)+\." /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest31() => Test(""" @"(?'Close-Open'>)" """, $""" <Tree> <CompilationUnit> <Sequence> <BalancingGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <SingleQuoteToken>'</SingleQuoteToken> <CaptureNameToken value="Close">Close</CaptureNameToken> <MinusToken>-</MinusToken> <CaptureNameToken value="Open">Open</CaptureNameToken> <SingleQuoteToken>'</SingleQuoteToken> <Sequence> <Text> <TextToken>></TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </BalancingGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Diagnostics> <Diagnostic Message="{string.Format(FeaturesResources.Reference_to_undefined_group_name_0, "Open")}" Span="[19..23)" Text="Open" /> </Diagnostics> <Captures> <Capture Name="0" Span="[10..26)" Text="(?'Close-Open'>)" /> <Capture Name="1" Span="[10..26)" Text="(?'Close-Open'>)" /> <Capture Name="Close" Span="[10..26)" Text="(?'Close-Open'>)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest32() => Test(""" @"[^<>]*" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrMoreQuantifier> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken><></TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="[^<>]*" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest33() => Test(""" @"\b\w+(?=\sis\b)" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <PositiveLookaheadGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <EqualsToken>=</EqualsToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <Text> <TextToken>is</TextToken> </Text> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </PositiveLookaheadGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..25)" Text="\b\w+(?=\sis\b)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest34() => Test(""" @"[a-z-[m]]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>a</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>z</TextToken> </Text> </CharacterClassRange> <CharacterClassSubtraction> <MinusToken>-</MinusToken> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>m</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </CharacterClassSubtraction> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="[a-z-[m]]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest35() => Test(""" @"^\D\d{1,5}\D*$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>D</TextToken> </CharacterClassEscape> <ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="5">5</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>D</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="^\D\d{1,5}\D*$" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest36() => Test(""" @"[^0-9]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="[^0-9]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest37() => Test(""" @"(\p{IsGreek}+(\s)?)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>IsGreek</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..30)" Text="(\p{IsGreek}+(\s)?)+" /> <Capture Name="1" Span="[10..29)" Text="(\p{IsGreek}+(\s)?)" /> <Capture Name="2" Span="[23..27)" Text="(\s)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest38() => Test(""" @"\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>IsGreek</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Pd</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>IsBasicLatin</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..65)" Text="\b(\p{IsGreek}+(\s)?)+\p{Pd}\s(\p{IsBasicLatin}+(\s)?)+" /> <Capture Name="1" Span="[12..31)" Text="(\p{IsGreek}+(\s)?)" /> <Capture Name="2" Span="[25..29)" Text="(\s)" /> <Capture Name="3" Span="[40..64)" Text="(\p{IsBasicLatin}+(\s)?)" /> <Capture Name="4" Span="[58..62)" Text="(\s)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest39() => Test(""" @"\b.*[.?!;:](\s|\z)" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>.?!;:</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <BarToken>|</BarToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>z</TextToken> </AnchorEscape> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..28)" Text="\b.*[.?!;:](\s|\z)" /> <Capture Name="1" Span="[21..28)" Text="(\s|\z)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest40() => Test(""" @"^.+" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <OneOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..13)" Text="^.+" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest41() => Test(""" @"[^o]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken>o</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..14)" Text="[^o]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest42() => Test(""" @"\bth[^o]\w+\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>th</TextToken> </Text> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken>o</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="\bth[^o]\w+\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest43() => Test(""" @"(\P{Sc})+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>P</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Sc</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="(\P{Sc})+" /> <Capture Name="1" Span="[10..18)" Text="(\P{Sc})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest44() => Test(""" @"[^\p{P}\d]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="[^\p{P}\d]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest45() => Test(""" @"\b[A-Z]\w*\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>A</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>Z</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..22)" Text="\b[A-Z]\w*\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest46() => Test(""" @"\S+?" """, """ <Tree> <CompilationUnit> <Sequence> <LazyQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>S</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..14)" Text="\S+?" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest47() => Test(""" @"y\s" """, """ <Tree> <CompilationUnit> <Sequence> <Text> <TextToken>y</TextToken> </Text> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..13)" Text="y\s" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest48() => Test(""" @"gr[ae]y\s\S+?[\s\p{P}]" """, """ <Tree> <CompilationUnit> <Sequence> <Text> <TextToken>gr</TextToken> </Text> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>ae</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <Text> <TextToken>y</TextToken> </Text> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <LazyQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>S</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..32)" Text="gr[ae]y\s\S+?[\s\p{P}]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest49() => Test(""" @"[\s\p{P}]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="[\s\p{P}]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest50() => Test(""" @"[\p{P}\d]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>P</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="[\p{P}\d]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest51() => Test(""" @"[^aeiou]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken>aeiou</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..18)" Text="[^aeiou]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest52() => Test(""" @"(\w)\1" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="(\w)\1" /> <Capture Name="1" Span="[10..14)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest53() => Test(""" @"[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] " """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Ll</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lu</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lt</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lo</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Nd</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Pc</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lm</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> <Text> <TextToken> </TextToken> </Text> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..56)" Text="[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}\p{Lm}] " /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest54() => Test(""" @"[^a-zA-Z_0-9]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <CharacterClassRange> <Text> <TextToken>a</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>z</TextToken> </Text> </CharacterClassRange> <CharacterClassRange> <Text> <TextToken>A</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>Z</TextToken> </Text> </CharacterClassRange> <Text> <TextToken>_</TextToken> </Text> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="[^a-zA-Z_0-9]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest55() => Test(""" @"\P{Nd}" """, """ <Tree> <CompilationUnit> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>P</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Nd</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="\P{Nd}" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest56() => Test(""" @"(\(?\d{3}\)?[\s-])?" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <Text> <TextToken>-</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..29)" Text="(\(?\d{3}\)?[\s-])?" /> <Capture Name="1" Span="[10..28)" Text="(\(?\d{3}\)?[\s-])" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest57() => Test(""" @"^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <Text> <TextToken>-</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..42)" Text="^(\(?\d{3}\)?[\s-])?\d{3}-\d{4}$" /> <Capture Name="1" Span="[11..29)" Text="(\(?\d{3}\)?[\s-])" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest58() => Test(""" @"[0-9]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..15)" Text="[0-9]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest59() => Test(""" @"\p{Nd}" """, """ <Tree> <CompilationUnit> <Sequence> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Nd</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="\p{Nd}" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest60() => Test(""" @"\b(\S+)\s?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>S</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="\b(\S+)\s?" /> <Capture Name="1" Span="[12..17)" Text="(\S+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest61() => Test(""" @"[^ \f\n\r\t\v]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <Text> <TextToken> </TextToken> </Text> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>f</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>n</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>r</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>t</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>v</TextToken> </SimpleEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="[^ \f\n\r\t\v]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest62() => Test(""" @"[^\f\n\r\t\v\x85\p{Z}]" """, """ <Tree> <CompilationUnit> <Sequence> <NegatedCharacterClass> <OpenBracketToken>[</OpenBracketToken> <CaretToken>^</CaretToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>f</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>n</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>r</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>t</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>v</TextToken> </SimpleEscape> <HexEscape> <BackslashToken>\</BackslashToken> <TextToken>x</TextToken> <TextToken>85</TextToken> </HexEscape> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Z</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </NegatedCharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..32)" Text="[^\f\n\r\t\v\x85\p{Z}]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest63() => Test(""" @"(\s|$)" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <BarToken>|</BarToken> <Sequence> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="(\s|$)" /> <Capture Name="1" Span="[10..16)" Text="(\s|$)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest64() => Test(""" @"\b\w+(e)?s(\s|$)" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>e</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <Text> <TextToken>s</TextToken> </Text> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <BarToken>|</BarToken> <Sequence> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="\b\w+(e)?s(\s|$)" /> <Capture Name="1" Span="[15..18)" Text="(e)" /> <Capture Name="2" Span="[20..26)" Text="(\s|$)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest65() => Test(""" @"[ \f\n\r\t\v]" """, """ <Tree> <CompilationUnit> <Sequence> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken> </TextToken> </Text> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>f</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>n</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>r</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>t</TextToken> </SimpleEscape> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>v</TextToken> </SimpleEscape> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="[ \f\n\r\t\v]" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest66() => Test(""" @"(\W){1,2}" """, """ <Tree> <CompilationUnit> <Sequence> <ClosedRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="(\W){1,2}" /> <Capture Name="1" Span="[10..14)" Text="(\W)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest67() => Test(""" @"(\w+)" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..15)" Text="(\w+)" /> <Capture Name="1" Span="[10..15)" Text="(\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest68() => Test(""" @"\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..12)" Text="\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest69() => Test(""" @"\b(\w+)(\W){1,2}" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ClosedRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="\b(\w+)(\W){1,2}" /> <Capture Name="1" Span="[12..17)" Text="(\w+)" /> <Capture Name="2" Span="[17..21)" Text="(\W)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest70() => Test(""" @"(?>(\w)\1+).\b" """, """ <Tree> <CompilationUnit> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="(?>(\w)\1+).\b" /> <Capture Name="1" Span="[13..17)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest71() => Test(""" @"(\b(\w+)\W+)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="(\b(\w+)\W+)+" /> <Capture Name="1" Span="[10..22)" Text="(\b(\w+)\W+)" /> <Capture Name="2" Span="[13..18)" Text="(\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest72() => Test(""" @"(\w)\1+.\b" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="(\w)\1+.\b" /> <Capture Name="1" Span="[10..14)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest73() => Test(""" @"\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Sc</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>.,</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Sc</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..40)" Text="\p{Sc}*(\s?\d+[.,]?\d*)\p{Sc}*" /> <Capture Name="1" Span="[17..33)" Text="(\s?\d+[.,]?\d*)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest74() => Test(""" @"p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*" """, """ <Tree> <CompilationUnit> <Sequence> <Text> <TextToken>p{Sc</TextToken> </Text> <ZeroOrMoreQuantifier> <Text> <TextToken>}</TextToken> </Text> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="amount">amount</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>.,</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <ZeroOrMoreQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Sc</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..48)" Text="p{Sc}*(?<amount>\s?\d+[.,]?\d*)\p{Sc}*" /> <Capture Name="1" Span="[16..41)" Text="(?<amount>\s?\d+[.,]?\d*)" /> <Capture Name="amount" Span="[16..41)" Text="(?<amount>\s?\d+[.,]?\d*)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest75() => Test(""" @"^(\w+\s?)+$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="^(\w+\s?)+$" /> <Capture Name="1" Span="[11..19)" Text="(\w+\s?)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest76() => Test(""" @"(?ix) d \w+ \s" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>ix</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <Text> <TextToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="(?ix) d \w+ \s" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest77() => Test(""" @"\b(?ix: d \w+)\s" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NestedOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>ix</OptionsToken> <ColonToken>:</ColonToken> <Sequence> <Text> <TextToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NestedOptionsGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..26)" Text="\b(?ix: d \w+)\s" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest78() => Test(""" @"\bthe\w*\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>the</TextToken> </Text> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..20)" Text="\bthe\w*\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest79() => Test(""" @"\b(?i:t)he\w*\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <NestedOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>i</OptionsToken> <ColonToken>:</ColonToken> <Sequence> <Text> <TextToken>t</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </NestedOptionsGrouping> <Text> <TextToken>he</TextToken> </Text> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..25)" Text="\b(?i:t)he\w*\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest80() => Test(""" @"^(\w+)\s(\d+)$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="^(\w+)\s(\d+)$" /> <Capture Name="1" Span="[11..16)" Text="(\w+)" /> <Capture Name="2" Span="[18..23)" Text="(\d+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest81() => Test(""" @"^(\w+)\s(\d+)\r*$" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrMoreQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>r</TextToken> </SimpleEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="^(\w+)\s(\d+)\r*$" /> <Capture Name="1" Span="[11..16)" Text="(\w+)" /> <Capture Name="2" Span="[18..23)" Text="(\d+)" /> </Captures> </Tree> """, RegexOptions.Multiline); [Fact] public void ReferenceTest82() => Test(""" @"(?m)^(\w+)\s(\d+)\r*$" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>m</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrMoreQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>r</TextToken> </SimpleEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <EndAnchor> <DollarToken>$</DollarToken> </EndAnchor> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..31)" Text="(?m)^(\w+)\s(\d+)\r*$" /> <Capture Name="1" Span="[15..20)" Text="(\w+)" /> <Capture Name="2" Span="[22..27)" Text="(\d+)" /> </Captures> </Tree> """, RegexOptions.Multiline); [Fact] public void ReferenceTest83() => Test(""" @"(?s)^.+" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>s</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <OneOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="(?s)^.+" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest84() => Test(""" @"\b(\d{2}-)*(?(1)\d{7}|\d{3}-\d{2}-\d{4})\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ConditionalCaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OpenParenToken>(</OpenParenToken> <NumberToken value="1">1</NumberToken> <CloseParenToken>)</CloseParenToken> <Alternation> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="7">7</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <BarToken>|</BarToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </ConditionalCaptureGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..52)" Text="\b(\d{2}-)*(?(1)\d{7}|\d{3}-\d{2}-\d{4})\b" /> <Capture Name="1" Span="[12..20)" Text="(\d{2}-)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest85() => Test(""" @"\b\(?((\w+),?\s?)+[\.!?]\)?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..37)" Text="\b\(?((\w+),?\s?)+[\.!?]\)?" /> <Capture Name="1" Span="[15..27)" Text="((\w+),?\s?)" /> <Capture Name="2" Span="[16..21)" Text="(\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest86() => Test(""" @"(?n)\b\(?((?>\w+),?\s?)+[\.!?]\)?" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>n</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..43)" Text="(?n)\b\(?((?>\w+),?\s?)+[\.!?]\)?" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest87() => Test(""" @"\b\(?(?n:(?>\w+),?\s?)+[\.!?]\)?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <NestedOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>n</OptionsToken> <ColonToken>:</ColonToken> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </NestedOptionsGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..42)" Text="\b\(?(?n:(?>\w+),?\s?)+[\.!?]\)?" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest88() => Test(""" @"\b\(?((?>\w+),?\s?)+[\.!?]\)?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..39)" Text="\b\(?((?>\w+),?\s?)+[\.!?]\)?" /> <Capture Name="1" Span="[15..29)" Text="((?>\w+),?\s?)" /> </Captures> </Tree> """, RegexOptions.IgnorePatternWhitespace); [Fact] public void ReferenceTest89() => Test(""" @"(?x)\b \(? ( (?>\w+) ,?\s? )+ [\.!?] \)? # Matches an entire sentence." """, """ <Tree> <CompilationUnit> <Sequence> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>x</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>(</OpenParenToken> <Sequence> <AtomicGrouping> <OpenParenToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <ZeroOrOneQuantifier> <Text> <TextToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> <CommentTrivia># Matches an entire sentence.</CommentTrivia> </Trivia> </EndOfFile> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..81)" Text="(?x)\b \(? ( (?>\w+) ,?\s? )+ [\.!?] \)? # Matches an entire sentence." /> <Capture Name="1" Span="[21..38)" Text="( (?>\w+) ,?\s? )" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest90() => Test(""" @"\bb\w+\s" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>b</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..18)" Text="\bb\w+\s" /> </Captures> </Tree> """, RegexOptions.RightToLeft); [Fact] public void ReferenceTest91() => Test(""" @"(?<=\d{1,2}\s)\w+,?\s\d{4}" """, """ <Tree> <CompilationUnit> <Sequence> <PositiveLookbehindGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <EqualsToken>=</EqualsToken> <Sequence> <ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </PositiveLookbehindGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..36)" Text="(?<=\d{1,2}\s)\w+,?\s\d{4}" /> </Captures> </Tree> """, RegexOptions.RightToLeft); [Fact] public void ReferenceTest92() => Test(""" @"\b(\w+\s*)+" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="\b(\w+\s*)+" /> <Capture Name="1" Span="[12..20)" Text="(\w+\s*)" /> </Captures> </Tree> """, RegexOptions.ECMAScript); [Fact] public void ReferenceTest93() => Test(""" @"((a+)(\1) ?)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <Text> <TextToken>a</TextToken> </Text> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrOneQuantifier> <Text> <TextToken> </TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="((a+)(\1) ?)+" /> <Capture Name="1" Span="[10..22)" Text="((a+)(\1) ?)" /> <Capture Name="2" Span="[11..15)" Text="(a+)" /> <Capture Name="3" Span="[15..19)" Text="(\1)" /> </Captures> </Tree> """, RegexOptions.ECMAScript); [Fact] public void ReferenceTest94() => Test(""" @"\b(D\w+)\s(d\w+)\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>D</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..28)" Text="\b(D\w+)\s(d\w+)\b" /> <Capture Name="1" Span="[12..18)" Text="(D\w+)" /> <Capture Name="2" Span="[20..26)" Text="(d\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest95() => Test(""" @"\b(D\w+)(?ixn) \s (d\w+) \b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>D</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>ixn</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <CharacterClassEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>(</OpenParenToken> <Sequence> <Text> <TextToken>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> </Trivia>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..37)" Text="\b(D\w+)(?ixn) \s (d\w+) \b" /> <Capture Name="1" Span="[12..18)" Text="(D\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest96() => Test(""" @"\b((?# case-sensitive comparison)D\w+)\s((?#case-insensitive comparison)d\w+)\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken> <Trivia> <CommentTrivia>(?# case-sensitive comparison)</CommentTrivia> </Trivia>D</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken> <Trivia> <CommentTrivia>(?#case-insensitive comparison)</CommentTrivia> </Trivia>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..89)" Text="\b((?# case-sensitive comparison)D\w+)\s((?#case-insensitive comparison)d\w+)\b" /> <Capture Name="1" Span="[12..48)" Text="((?# case-sensitive comparison)D\w+)" /> <Capture Name="2" Span="[50..87)" Text="((?#case-insensitive comparison)d\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest97() => Test(""" @"\b\(?((?>\w+),?\s?)+[\.!?]\)?" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <ZeroOrOneQuantifier> <Text> <TextToken>,</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <ZeroOrOneQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> <Text> <TextToken>!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>)</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..39)" Text="\b\(?((?>\w+),?\s?)+[\.!?]\)?" /> <Capture Name="1" Span="[15..29)" Text="((?>\w+),?\s?)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest98() => Test(""" @"\b(?<n2>\d{2}-)*(?(n2)\d{7}|\d{3}-\d{2}-\d{4})\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <ZeroOrMoreQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="n2">n2</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ConditionalCaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OpenParenToken>(</OpenParenToken> <CaptureNameToken value="n2">n2</CaptureNameToken> <CloseParenToken>)</CloseParenToken> <Alternation> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="7">7</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <BarToken>|</BarToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </ConditionalCaptureGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..58)" Text="\b(?<n2>\d{2}-)*(?(n2)\d{7}|\d{3}-\d{2}-\d{4})\b" /> <Capture Name="1" Span="[12..25)" Text="(?<n2>\d{2}-)" /> <Capture Name="n2" Span="[12..25)" Text="(?<n2>\d{2}-)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest99() => Test(""" @"\b(\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="7">7</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <BarToken>|</BarToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <Text> <TextToken>-</TextToken> </Text> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..45)" Text="\b(\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b" /> <Capture Name="1" Span="[12..43)" Text="(\d{2}-\d{7}|\d{3}-\d{2}-\d{4})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest100() => Test(""" @"\bgr(a|e)y\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>gr</TextToken> </Text> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <Text> <TextToken>a</TextToken> </Text> </Sequence> <BarToken>|</BarToken> <Sequence> <Text> <TextToken>e</TextToken> </Text> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <Text> <TextToken>y</TextToken> </Text> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..22)" Text="\bgr(a|e)y\b" /> <Capture Name="1" Span="[14..19)" Text="(a|e)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest101() => Test(""" @"(?>(\w)\1+).\b" """, """ <Tree> <CompilationUnit> <Sequence> <AtomicGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </AtomicGrouping> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="(?>(\w)\1+).\b" /> <Capture Name="1" Span="[13..17)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest102() => Test(""" @"(\b(\w+)\W+)+" """, """ <Tree> <CompilationUnit> <Sequence> <OneOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>W</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="(\b(\w+)\W+)+" /> <Capture Name="1" Span="[10..22)" Text="(\b(\w+)\W+)" /> <Capture Name="2" Span="[13..18)" Text="(\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest103() => Test(""" @"\b91*9*\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>9</TextToken> </Text> <ZeroOrMoreQuantifier> <Text> <TextToken>1</TextToken> </Text> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ZeroOrMoreQuantifier> <Text> <TextToken>9</TextToken> </Text> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..19)" Text="\b91*9*\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest104() => Test(""" @"\ban+\w*?\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>a</TextToken> </Text> <OneOrMoreQuantifier> <Text> <TextToken>n</TextToken> </Text> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <LazyQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="\ban+\w*?\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest105() => Test(""" @"\ban?\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>a</TextToken> </Text> <ZeroOrOneQuantifier> <Text> <TextToken>n</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..17)" Text="\ban?\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest106() => Test(""" @"\b\d+\,\d{3}\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>,</TextToken> </SimpleEscape> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="\b\d+\,\d{3}\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest107() => Test(""" @"\b\d{2,}\b\D+" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OpenRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CommaToken>,</CommaToken> <CloseBraceToken>}</CloseBraceToken> </OpenRangeNumericQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>D</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="\b\d{2,}\b\D+" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest108() => Test(""" @"(00\s){2,4}" """, """ <Tree> <CompilationUnit> <Sequence> <ClosedRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>00</TextToken> </Text> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="(00\s){2,4}" /> <Capture Name="1" Span="[10..16)" Text="(00\s)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest109() => Test(""" @"\b\w*?oo\w*?\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <LazyQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <Text> <TextToken>oo</TextToken> </Text> <LazyQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..24)" Text="\b\w*?oo\w*?\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest110() => Test(""" @"\b\w+?\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <LazyQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..18)" Text="\b\w+?\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest111() => Test(""" @"^\s*(System.)??Console.Write(Line)??\(??" """, """ <Tree> <CompilationUnit> <Sequence> <StartAnchor> <CaretToken>^</CaretToken> </StartAnchor> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <LazyQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>System</TextToken> </Text> <Wildcard> <DotToken>.</DotToken> </Wildcard> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <Text> <TextToken>Console</TextToken> </Text> <Wildcard> <DotToken>.</DotToken> </Wildcard> <Text> <TextToken>Write</TextToken> </Text> <LazyQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>Line</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <LazyQuantifier> <ZeroOrOneQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>(</TextToken> </SimpleEscape> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..50)" Text="^\s*(System.)??Console.Write(Line)??\(??" /> <Capture Name="1" Span="[14..23)" Text="(System.)" /> <Capture Name="2" Span="[38..44)" Text="(Line)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest112() => Test(""" @"(System.)??" """, """ <Tree> <CompilationUnit> <Sequence> <LazyQuantifier> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>System</TextToken> </Text> <Wildcard> <DotToken>.</DotToken> </Wildcard> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="(System.)??" /> <Capture Name="1" Span="[10..19)" Text="(System.)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest113() => Test(""" @"\b(\w{3,}?\.){2}?\w{3,}?\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <LazyQuantifier> <ExactNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <LazyQuantifier> <OpenRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CommaToken>,</CommaToken> <CloseBraceToken>}</CloseBraceToken> </OpenRangeNumericQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>.</TextToken> </SimpleEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <LazyQuantifier> <OpenRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="3">3</NumberToken> <CommaToken>,</CommaToken> <CloseBraceToken>}</CloseBraceToken> </OpenRangeNumericQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..36)" Text="\b(\w{3,}?\.){2}?\w{3,}?\b" /> <Capture Name="1" Span="[12..23)" Text="(\w{3,}?\.)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest114() => Test(""" @"\b[A-Z](\w*?\s*?){1,10}[.!?]" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>A</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>Z</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <ClosedRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <LazyQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <LazyQuantifier> <ZeroOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="10">10</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>.!?</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..38)" Text="\b[A-Z](\w*?\s*?){1,10}[.!?]" /> <Capture Name="1" Span="[17..27)" Text="(\w*?\s*?)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest115() => Test(""" @"b.*([0-9]{4})\b" """, """ <Tree> <CompilationUnit> <Sequence> <Text> <TextToken>b</TextToken> </Text> <ZeroOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..25)" Text="b.*([0-9]{4})\b" /> <Capture Name="1" Span="[13..23)" Text="([0-9]{4})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest116() => Test(""" @"\b.*?([0-9]{4})\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <LazyQuantifier> <ZeroOrMoreQuantifier> <Wildcard> <DotToken>.</DotToken> </Wildcard> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <CharacterClassRange> <Text> <TextToken>0</TextToken> </Text> <MinusToken>-</MinusToken> <Text> <TextToken>9</TextToken> </Text> </CharacterClassRange> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="\b.*?([0-9]{4})\b" /> <Capture Name="1" Span="[15..25)" Text="([0-9]{4})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest117() => Test(""" @"(a?)*" """, """ <Tree> <CompilationUnit> <Sequence> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ZeroOrOneQuantifier> <Text> <TextToken>a</TextToken> </Text> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..15)" Text="(a?)*" /> <Capture Name="1" Span="[10..14)" Text="(a?)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest118() => Test(""" @"(a\1|(?(1)\1)){0,2}" """, """ <Tree> <CompilationUnit> <Sequence> <ClosedRangeNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <Text> <TextToken>a</TextToken> </Text> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <BarToken>|</BarToken> <Sequence> <ConditionalCaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OpenParenToken>(</OpenParenToken> <NumberToken value="1">1</NumberToken> <CloseParenToken>)</CloseParenToken> <Sequence> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </ConditionalCaptureGrouping> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="0">0</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..29)" Text="(a\1|(?(1)\1)){0,2}" /> <Capture Name="1" Span="[10..24)" Text="(a\1|(?(1)\1))" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest119() => Test(""" @"(a\1|(?(1)\1)){2}" """, """ <Tree> <CompilationUnit> <Sequence> <ExactNumericQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Alternation> <Sequence> <Text> <TextToken>a</TextToken> </Text> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <BarToken>|</BarToken> <Sequence> <ConditionalCaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OpenParenToken>(</OpenParenToken> <NumberToken value="1">1</NumberToken> <CloseParenToken>)</CloseParenToken> <Sequence> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </ConditionalCaptureGrouping> </Sequence> </Alternation> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="(a\1|(?(1)\1)){2}" /> <Capture Name="1" Span="[10..24)" Text="(a\1|(?(1)\1))" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest120() => Test(""" @"(\w)\1" """, """ <Tree> <CompilationUnit> <Sequence> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..16)" Text="(\w)\1" /> <Capture Name="1" Span="[10..14)" Text="(\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest121() => Test(""" @"(?<char>\w)\k<char>" """, """ <Tree> <CompilationUnit> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="char">char</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <KCaptureEscape> <BackslashToken>\</BackslashToken> <TextToken>k</TextToken> <LessThanToken><</LessThanToken> <CaptureNameToken value="char">char</CaptureNameToken> <GreaterThanToken>></GreaterThanToken> </KCaptureEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..29)" Text="(?<char>\w)\k<char>" /> <Capture Name="1" Span="[10..21)" Text="(?<char>\w)" /> <Capture Name="char" Span="[10..21)" Text="(?<char>\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest122() => Test(""" @"(?<2>\w)\k<2>" """, """ <Tree> <CompilationUnit> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <NumberToken value="2">2</NumberToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <KCaptureEscape> <BackslashToken>\</BackslashToken> <TextToken>k</TextToken> <LessThanToken><</LessThanToken> <NumberToken value="2">2</NumberToken> <GreaterThanToken>></GreaterThanToken> </KCaptureEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..23)" Text="(?<2>\w)\k<2>" /> <Capture Name="2" Span="[10..18)" Text="(?<2>\w)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest123() => Test(""" @"(?<1>a)(?<1>\1b)*" """, """ <Tree> <CompilationUnit> <Sequence> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <NumberToken value="1">1</NumberToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <Text> <TextToken>a</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <ZeroOrMoreQuantifier> <CaptureGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <LessThanToken><</LessThanToken> <NumberToken value="1">1</NumberToken> <GreaterThanToken>></GreaterThanToken> <Sequence> <BackreferenceEscape> <BackslashToken>\</BackslashToken> <NumberToken value="1">1</NumberToken> </BackreferenceEscape> <Text> <TextToken>b</TextToken> </Text> </Sequence> <CloseParenToken>)</CloseParenToken> </CaptureGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..27)" Text="(?<1>a)(?<1>\1b)*" /> <Capture Name="1" Span="[10..17)" Text="(?<1>a)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest124() => Test(""" @"\b(\p{Lu}{2})(\d{2})?(\p{Lu}{2})\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lu</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <QuestionToken>?</QuestionToken> </ZeroOrOneQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <ExactNumericQuantifier> <CategoryEscape> <BackslashToken>\</BackslashToken> <TextToken>p</TextToken> <OpenBraceToken>{</OpenBraceToken> <EscapeCategoryToken>Lu</EscapeCategoryToken> <CloseBraceToken>}</CloseBraceToken> </CategoryEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="2">2</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ExactNumericQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..44)" Text="\b(\p{Lu}{2})(\d{2})?(\p{Lu}{2})\b" /> <Capture Name="1" Span="[12..23)" Text="(\p{Lu}{2})" /> <Capture Name="2" Span="[23..30)" Text="(\d{2})" /> <Capture Name="3" Span="[31..42)" Text="(\p{Lu}{2})" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest125() => Test(""" @"\bgr[ae]y\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <Text> <TextToken>gr</TextToken> </Text> <CharacterClass> <OpenBracketToken>[</OpenBracketToken> <Sequence> <Text> <TextToken>ae</TextToken> </Text> </Sequence> <CloseBracketToken>]</CloseBracketToken> </CharacterClass> <Text> <TextToken>y</TextToken> </Text> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..21)" Text="\bgr[ae]y\b" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest126() => Test(""" @"\b((?# case sensitive comparison)D\w+)\s(?ixn)((?#case insensitive comparison)d\w+)\b" """, """ <Tree> <CompilationUnit> <Sequence> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken> <Trivia> <CommentTrivia>(?# case sensitive comparison)</CommentTrivia> </Trivia>D</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>s</TextToken> </CharacterClassEscape> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>ixn</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken> <Trivia> <CommentTrivia>(?#case insensitive comparison)</CommentTrivia> </Trivia>d</TextToken> </Text> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AnchorEscape> <BackslashToken>\</BackslashToken> <TextToken>b</TextToken> </AnchorEscape> </Sequence> <EndOfFile /> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..95)" Text="\b((?# case sensitive comparison)D\w+)\s(?ixn)((?#case insensitive comparison)d\w+)\b" /> <Capture Name="1" Span="[12..48)" Text="((?# case sensitive comparison)D\w+)" /> </Captures> </Tree> """, RegexOptions.None); [Fact] public void ReferenceTest127() => Test(""" @"\{\d+(,-*\d+)*(\:\w{1,4}?)*\}(?x) # Looks for a composite format item." """, """ <Tree> <CompilationUnit> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>{</TextToken> </SimpleEscape> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <Text> <TextToken>,</TextToken> </Text> <ZeroOrMoreQuantifier> <Text> <TextToken>-</TextToken> </Text> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <OneOrMoreQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>d</TextToken> </CharacterClassEscape> <PlusToken>+</PlusToken> </OneOrMoreQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <ZeroOrMoreQuantifier> <SimpleGrouping> <OpenParenToken>(</OpenParenToken> <Sequence> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>:</TextToken> </SimpleEscape> <LazyQuantifier> <ClosedRangeNumericQuantifier> <CharacterClassEscape> <BackslashToken>\</BackslashToken> <TextToken>w</TextToken> </CharacterClassEscape> <OpenBraceToken>{</OpenBraceToken> <NumberToken value="1">1</NumberToken> <CommaToken>,</CommaToken> <NumberToken value="4">4</NumberToken> <CloseBraceToken>}</CloseBraceToken> </ClosedRangeNumericQuantifier> <QuestionToken>?</QuestionToken> </LazyQuantifier> </Sequence> <CloseParenToken>)</CloseParenToken> </SimpleGrouping> <AsteriskToken>*</AsteriskToken> </ZeroOrMoreQuantifier> <SimpleEscape> <BackslashToken>\</BackslashToken> <TextToken>}</TextToken> </SimpleEscape> <SimpleOptionsGrouping> <OpenParenToken>(</OpenParenToken> <QuestionToken>?</QuestionToken> <OptionsToken>x</OptionsToken> <CloseParenToken>)</CloseParenToken> </SimpleOptionsGrouping> </Sequence> <EndOfFile> <Trivia> <WhitespaceTrivia> </WhitespaceTrivia> <CommentTrivia># Looks for a composite format item.</CommentTrivia> </Trivia> </EndOfFile> </CompilationUnit> <Captures> <Capture Name="0" Span="[10..80)" Text="\{\d+(,-*\d+)*(\:\w{1,4}?)*\}(?x) # Looks for a composite format item." /> <Capture Name="1" Span="[15..23)" Text="(,-*\d+)" /> <Capture Name="2" Span="[24..36)" Text="(\:\w{1,4}?)" /> </Captures> </Tree> """, RegexOptions.None); }