diff --git a/cpp/ql/lib/semmle/code/cpp/regex/RegexTreeView.qll b/cpp/ql/lib/semmle/code/cpp/regex/RegexTreeView.qll index a0a116f2fe0..c91b588e51a 100644 --- a/cpp/ql/lib/semmle/code/cpp/regex/RegexTreeView.qll +++ b/cpp/ql/lib/semmle/code/cpp/regex/RegexTreeView.qll @@ -215,10 +215,25 @@ private module Impl implements RegexTreeViewSig { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - exists(int re_start | + exists(int re_start, int contentStartOffset, string valueText | re.getLocation().hasLocationInfo(filepath, startline, re_start, endline, _) and - startcolumn = re_start + 1 + start and - endcolumn = re_start + 1 + end - 1 + valueText = re.getValueText() and + ( + valueText.regexpMatch("^\\s*(u8|L|u|U)?R\".*") and + exists(string prefix, string delimiter | + prefix = valueText.regexpCapture("^\\s*(u8|L|u|U)?R\"", 1) and + delimiter = valueText.regexpCapture("^\\s*(u8|L|u|U)?R\"([^()]*)\\(", 2) and + contentStartOffset = prefix.length() + delimiter.length() + 3 + ) + or + valueText.regexpMatch("^\\s*(u8|L|u|U)?\".*") and + exists(string prefix | + prefix = valueText.regexpCapture("^\\s*(u8|L|u|U)?\"", 1) and + contentStartOffset = prefix.length() + 1 + ) + ) and + startcolumn = re_start + contentStartOffset + start and + endcolumn = re_start + contentStartOffset + end - 1 ) } diff --git a/cpp/ql/test/library-tests/regex/parse.expected b/cpp/ql/test/library-tests/regex/parse.expected index 55d22c1b5fd..1f92debd8e5 100644 --- a/cpp/ql/test/library-tests/regex/parse.expected +++ b/cpp/ql/test/library-tests/regex/parse.expected @@ -1,520 +1,519 @@ -regexp.cpp: -# 18| [RegExpConstant, RegExpNormalChar] abc +#-----| [RegExpConstant, RegExpNormalChar] abc -# 21| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpConstant, RegExpNormalChar] abc -# 21| [RegExpStar] a* +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpEscape] \n + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpEscape] \u{987 + +#-----| [RegExpConstant, RegExpNormalChar] A + +#-----| [RegExpConstant, RegExpNormalChar] F + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpConstant, RegExpNormalChar] q + +#-----| [RegExpCharacterClassEscape] \s + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpConstant, RegExpNormalChar] o + +#-----| [RegExpCharacterClassEscape] \w + +#-----| [RegExpConstant, RegExpNormalChar] : + +#-----| [RegExpCharacterClassEscape] \w + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpNormalChar] cd + +#-----| [RegExpConstant, RegExpNormalChar] e + +#-----| [RegExpConstant, RegExpNormalChar] fo + +#-----| [RegExpConstant, RegExpNormalChar] o + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpNormalChar] ar + +#-----| [RegExpConstant, RegExpNormalChar] foo + +#-----| [RegExpConstant, RegExpNormalChar] bar + +#-----| [RegExpConstant, RegExpNormalChar] !a + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpConstant, RegExpEscape] \n + +#-----| [RegExpConstant, RegExpEscape] \r + +#-----| [RegExpConstant, RegExpEscape] \t + +#-----| [RegExpCharacterClassEscape] \h + +#-----| [RegExpCharacterClassEscape] \H + +#-----| [RegExpCharacterClassEscape] \d + +#-----| [RegExpCharacterClassEscape] \D + +#-----| [RegExpCharacterClassEscape] \s + +#-----| [RegExpCharacterClassEscape] \S + +#-----| [RegExpCharacterClassEscape] \w + +#-----| [RegExpCharacterClassEscape] \W + +#-----| [RegExpConstant, RegExpNormalChar] [ + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpConstant, RegExpNormalChar] A-F] + +#-----| [RegExpConstant, RegExpNormalChar] | + +#-----| [RegExpConstant, RegExpNormalChar] - + +#-----| [RegExpConstant, RegExpNormalChar] ] + +#-----| [RegExpConstant, RegExpNormalChar] ] + +#-----| [RegExpConstant, RegExpNormalChar] A + +#-----| [RegExpConstant, RegExpNormalChar] Z + +#-----| [RegExpConstant, RegExpEscape] \[ + +#-----| [RegExpConstant, RegExpEscape] \] + +#-----| [RegExpConstant, RegExpNormalChar] 1 + +#-----| [RegExpConstant, RegExpNormalChar] 2 + +#-----| [RegExpConstant, RegExpNormalChar] 3 + +#-----| [RegExpCharacterClassEscape] \w + +#-----| [RegExpConstant, RegExpNormalChar] + + +#-----| [RegExpConstant, RegExpNormalChar] - + +#-----| [RegExpCharacterClassEscape] \d + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpConstant, RegExpNormalChar] A + +#-----| [RegExpConstant, RegExpNormalChar] F + +#-----| [RegExpConstant, RegExpNormalChar] 0 + +#-----| [RegExpConstant, RegExpNormalChar] 9 + +#-----| [RegExpConstant, RegExpNormalChar] _ + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpNormalChar] c + +#-----| [RegExpConstant, RegExpNormalChar] foo + +#-----| [RegExpConstant, RegExpNormalChar] bar + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] a + +#-----| [RegExpConstant, RegExpNormalChar] b + +#-----| [RegExpConstant, RegExpNormalChar] c + +#-----| [RegExpConstant, RegExpNormalChar] d + +#-----| [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpSequence] a\nb #-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| 1 -> [RegExpConstant, RegExpEscape] \n +#-----| 2 -> [RegExpConstant, RegExpNormalChar] b -# 21| [RegExpSequence] a*b+c?d +#-----| [RegExpSequence] [[:alpha:]][[:digit:]] +#-----| 0 -> [RegExpCharacterClass] [[:alpha:]] +#-----| 1 -> [RegExpCharacterClass] [[:digit:]] + +#-----| [RegExpSequence] (?q+)\s+\k+ +#-----| 0 -> [RegExpGroup] (?q+) +#-----| 1 -> [RegExpPlus] \s+ +#-----| 2 -> [RegExpPlus] \k+ + +#-----| [RegExpSequence] (a+)b+\1 +#-----| 0 -> [RegExpGroup] (a+) +#-----| 1 -> [RegExpPlus] b+ +#-----| 2 -> [RegExpBackRef] \1 + +#-----| [RegExpSequence] fo+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] f +#-----| 1 -> [RegExpPlus] o+ + +#-----| [RegExpSequence] (?::+)\w +#-----| 0 -> [RegExpGroup] (?::+) +#-----| 1 -> [RegExpCharacterClassEscape] \w + +#-----| [RegExpSequence] (a|b|cd)e +#-----| 0 -> [RegExpGroup] (a|b|cd) +#-----| 1 -> [RegExpConstant, RegExpNormalChar] e + +#-----| [RegExpSequence] fo(o|b)ar +#-----| 0 -> [RegExpConstant, RegExpNormalChar] fo +#-----| 1 -> [RegExpGroup] (o|b) +#-----| 2 -> [RegExpConstant, RegExpNormalChar] ar + +#-----| [RegExpSequence] (foo)*bar +#-----| 0 -> [RegExpStar] (foo)* +#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar + +#-----| [RegExpSequence] \b!a\B +#-----| 0 -> [RegExpSpecialChar] \b +#-----| 1 -> [RegExpConstant, RegExpNormalChar] !a +#-----| 2 -> [RegExpNonWordBoundary] \B + +#-----| [RegExpSequence] \Gabc +#-----| 0 -> [RegExpSpecialChar] \G +#-----| 1 -> [RegExpConstant, RegExpNormalChar] abc + +#-----| [RegExpSequence] \n\r\t +#-----| 0 -> [RegExpConstant, RegExpEscape] \n +#-----| 1 -> [RegExpConstant, RegExpEscape] \r +#-----| 2 -> [RegExpConstant, RegExpEscape] \t + +#-----| [RegExpSequence] \h\H +#-----| 0 -> [RegExpCharacterClassEscape] \h +#-----| 1 -> [RegExpCharacterClassEscape] \H + +#-----| [RegExpSequence] \d\D +#-----| 0 -> [RegExpCharacterClassEscape] \d +#-----| 1 -> [RegExpCharacterClassEscape] \D + +#-----| [RegExpSequence] \s\S +#-----| 0 -> [RegExpCharacterClassEscape] \s +#-----| 1 -> [RegExpCharacterClassEscape] \S + +#-----| [RegExpSequence] \w+\W +#-----| 0 -> [RegExpPlus] \w+ +#-----| 1 -> [RegExpCharacterClassEscape] \W + +#-----| [RegExpSequence] [[a-f]A-F] +#-----| 0 -> [RegExpCharacterClass] [[a-f] +#-----| 1 -> [RegExpConstant, RegExpNormalChar] A-F] + +#-----| [RegExpSequence] \[\][123] +#-----| 0 -> [RegExpConstant, RegExpEscape] \[ +#-----| 1 -> [RegExpConstant, RegExpEscape] \] +#-----| 2 -> [RegExpCharacterClass] [123] + +#-----| [RegExpSequence] \A[+-]?\d+ +#-----| 0 -> [RegExpCaret] \A +#-----| 1 -> [RegExpOpt] [+-]? +#-----| 2 -> [RegExpPlus] \d+ + +#-----| [RegExpSequence] a*b+c?d #-----| 0 -> [RegExpStar] a* #-----| 1 -> [RegExpPlus] b+ #-----| 2 -> [RegExpOpt] c? #-----| 3 -> [RegExpConstant, RegExpNormalChar] d -# 21| [RegExpConstant, RegExpNormalChar] b +#-----| [RegExpNamedCharacterProperty] [:digit:] -# 21| [RegExpPlus] b+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] b +#-----| [RegExpNamedCharacterProperty] [:digit:] -# 21| [RegExpConstant, RegExpNormalChar] c +#-----| [RegExpNamedCharacterProperty] [:alpha:] -# 21| [RegExpOpt] c? -#-----| 0 -> [RegExpConstant, RegExpNormalChar] c +#-----| [RegExpNamedCharacterProperty] [:digit:] -# 21| [RegExpConstant, RegExpNormalChar] d +#-----| [RegExpNamedCharacterProperty] [:alpha:] -# 22| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpNamedCharacterProperty] [:digit:] -# 22| [RegExpRange] a{4,8} -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpNamedCharacterProperty] \p{Digit} -# 23| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpNamedCharacterProperty] \p{^Alnum} -# 23| [RegExpRange] a{,8} -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpNamedCharacterProperty] \P{Digit} -# 24| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpNamedCharacterProperty] \p{Word} -# 24| [InfiniteRepetitionQuantifier, RegExpRange] a{3,} -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpBackRef] \k -# 25| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpBackRef] \1 -# 25| [RegExpRange] a{7} -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpSpecialChar] \b -# 28| [RegExpConstant, RegExpNormalChar] foo +#-----| [RegExpNonWordBoundary] \B -# 28| [RegExpAlt] foo|bar +#-----| [RegExpSpecialChar] \G + +#-----| [RegExpDot] . + +#-----| [RegExpDot] . + +#-----| [RegExpCaret] \A + +#-----| [RegExpGroup] (?q+) +#-----| 0 -> [RegExpPlus] q+ + +#-----| [RegExpGroup] (a+) +#-----| 0 -> [RegExpPlus] a+ + +#-----| [RegExpGroup] (?'foo'fo+) +#-----| 0 -> [RegExpSequence] fo+ + +#-----| [RegExpGroup] (?\w+) +#-----| 0 -> [RegExpPlus] \w+ + +#-----| [RegExpGroup] (?::+) +#-----| 0 -> [RegExpPlus] :+ + +#-----| [RegExpGroup] (a|b|cd) +#-----| 0 -> [RegExpAlt] a|b|cd + +#-----| [RegExpGroup] (o|b) +#-----| 0 -> [RegExpAlt] o|b + +#-----| [RegExpGroup] (foo) #-----| 0 -> [RegExpConstant, RegExpNormalChar] foo -#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar -# 28| [RegExpConstant, RegExpNormalChar] bar +#-----| [RegExpCharacterRange] A-F +#-----| 0 -> [RegExpConstant, RegExpNormalChar] A +#-----| 1 -> [RegExpConstant, RegExpNormalChar] F -# 31| [RegExpCharacterClass] [abc] +#-----| [RegExpCharacterRange] a-f #-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpNormalChar] b -#-----| 2 -> [RegExpConstant, RegExpNormalChar] c +#-----| 1 -> [RegExpConstant, RegExpNormalChar] f -# 31| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpCharacterRange] a-f +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| 1 -> [RegExpConstant, RegExpNormalChar] f -# 31| [RegExpConstant, RegExpNormalChar] b +#-----| [RegExpCharacterRange] a-f +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| 1 -> [RegExpConstant, RegExpNormalChar] f -# 31| [RegExpConstant, RegExpNormalChar] c +#-----| [RegExpCharacterRange] A-Z +#-----| 0 -> [RegExpConstant, RegExpNormalChar] A +#-----| 1 -> [RegExpConstant, RegExpNormalChar] Z -# 32| [RegExpCharacterClass] [a-fA-F0-9_] +#-----| [RegExpCharacterRange] a-f +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| 1 -> [RegExpConstant, RegExpNormalChar] f + +#-----| [RegExpCharacterRange] A-F +#-----| 0 -> [RegExpConstant, RegExpNormalChar] A +#-----| 1 -> [RegExpConstant, RegExpNormalChar] F + +#-----| [RegExpCharacterRange] 0-9 +#-----| 0 -> [RegExpConstant, RegExpNormalChar] 0 +#-----| 1 -> [RegExpConstant, RegExpNormalChar] 9 + +#-----| [RegExpCharacterClass] [A-F[:digit:]a-f] +#-----| 0 -> [RegExpCharacterRange] A-F +#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:] +#-----| 2 -> [RegExpCharacterRange] a-f + +#-----| [RegExpCharacterClass] [[:alpha:][:digit:]] +#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:] +#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:] + +#-----| [RegExpCharacterClass] [[:alpha:]] +#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:] + +#-----| [RegExpCharacterClass] [[:digit:]] +#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:] + +#-----| [RegExpCharacterClass] [a-f\p{Digit}] +#-----| 0 -> [RegExpCharacterRange] a-f +#-----| 1 -> [RegExpNamedCharacterProperty] \p{Digit} + +#-----| [RegExpCharacterClass] [[a-f] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] [ +#-----| 1 -> [RegExpCharacterRange] a-f + +#-----| [RegExpCharacterClass] [|] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] | + +#-----| [RegExpCharacterClass] [^-] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] - + +#-----| [RegExpCharacterClass] [^]] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] ] + +#-----| [RegExpCharacterClass] []] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] ] + +#-----| [RegExpCharacterClass] [^A-Z] +#-----| 0 -> [RegExpCharacterRange] A-Z + +#-----| [RegExpCharacterClass] [123] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] 1 +#-----| 1 -> [RegExpConstant, RegExpNormalChar] 2 +#-----| 2 -> [RegExpConstant, RegExpNormalChar] 3 + +#-----| [RegExpCharacterClass] [\w] +#-----| 0 -> [RegExpCharacterClassEscape] \w + +#-----| [RegExpCharacterClass] [+-] +#-----| 0 -> [RegExpConstant, RegExpNormalChar] + +#-----| 1 -> [RegExpConstant, RegExpNormalChar] - + +#-----| [RegExpCharacterClass] [a-fA-F0-9_] #-----| 0 -> [RegExpCharacterRange] a-f #-----| 1 -> [RegExpCharacterRange] A-F #-----| 2 -> [RegExpCharacterRange] 0-9 #-----| 3 -> [RegExpConstant, RegExpNormalChar] _ -# 32| [RegExpConstant, RegExpNormalChar] a - -# 32| [RegExpCharacterRange] a-f +#-----| [RegExpCharacterClass] [abc] #-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpNormalChar] f - -# 32| [RegExpConstant, RegExpNormalChar] f - -# 32| [RegExpConstant, RegExpNormalChar] A - -# 32| [RegExpCharacterRange] A-F -#-----| 0 -> [RegExpConstant, RegExpNormalChar] A -#-----| 1 -> [RegExpConstant, RegExpNormalChar] F - -# 32| [RegExpConstant, RegExpNormalChar] F - -# 32| [RegExpConstant, RegExpNormalChar] 0 - -# 32| [RegExpCharacterRange] 0-9 -#-----| 0 -> [RegExpConstant, RegExpNormalChar] 0 -#-----| 1 -> [RegExpConstant, RegExpNormalChar] 9 - -# 32| [RegExpConstant, RegExpNormalChar] 9 - -# 32| [RegExpConstant, RegExpNormalChar] _ - -# 33| [RegExpCaret] \A - -# 33| [RegExpSequence] \A[+-]?\d+ -#-----| 0 -> [RegExpCaret] \A -#-----| 1 -> [RegExpOpt] [+-]? -#-----| 2 -> [RegExpPlus] \d+ - -# 33| [RegExpCharacterClass] [+-] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] + -#-----| 1 -> [RegExpConstant, RegExpNormalChar] - - -# 33| [RegExpOpt] [+-]? -#-----| 0 -> [RegExpCharacterClass] [+-] - -# 33| [RegExpConstant, RegExpNormalChar] + - -# 33| [RegExpConstant, RegExpNormalChar] - - -# 33| [RegExpCharacterClassEscape] \d - -# 33| [RegExpPlus] \d+ -#-----| 0 -> [RegExpCharacterClassEscape] \d - -# 34| [RegExpCharacterClass] [\w] -#-----| 0 -> [RegExpCharacterClassEscape] \w - -# 34| [RegExpPlus] [\w]+ -#-----| 0 -> [RegExpCharacterClass] [\w] - -# 34| [RegExpCharacterClassEscape] \w - -# 35| [RegExpConstant, RegExpEscape] \[ - -# 35| [RegExpSequence] \[\][123] -#-----| 0 -> [RegExpConstant, RegExpEscape] \[ -#-----| 1 -> [RegExpConstant, RegExpEscape] \] -#-----| 2 -> [RegExpCharacterClass] [123] - -# 35| [RegExpConstant, RegExpEscape] \] - -# 35| [RegExpCharacterClass] [123] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] 1 -#-----| 1 -> [RegExpConstant, RegExpNormalChar] 2 -#-----| 2 -> [RegExpConstant, RegExpNormalChar] 3 - -# 35| [RegExpConstant, RegExpNormalChar] 1 - -# 35| [RegExpConstant, RegExpNormalChar] 2 - -# 35| [RegExpConstant, RegExpNormalChar] 3 - -# 36| [RegExpCharacterClass] [^A-Z] -#-----| 0 -> [RegExpCharacterRange] A-Z - -# 36| [RegExpConstant, RegExpNormalChar] A - -# 36| [RegExpCharacterRange] A-Z -#-----| 0 -> [RegExpConstant, RegExpNormalChar] A -#-----| 1 -> [RegExpConstant, RegExpNormalChar] Z - -# 36| [RegExpConstant, RegExpNormalChar] Z - -# 37| [RegExpCharacterClass] []] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] ] - -# 37| [RegExpConstant, RegExpNormalChar] ] - -# 38| [RegExpCharacterClass] [^]] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] ] - -# 38| [RegExpConstant, RegExpNormalChar] ] - -# 39| [RegExpCharacterClass] [^-] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] - - -# 39| [RegExpConstant, RegExpNormalChar] - - -# 40| [RegExpCharacterClass] [|] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] | - -# 40| [RegExpConstant, RegExpNormalChar] | - -# 43| [RegExpCharacterClass] [[a-f] -#-----| 0 -> [RegExpConstant, RegExpNormalChar] [ -#-----| 1 -> [RegExpCharacterRange] a-f - -# 43| [RegExpSequence] [[a-f]A-F] -#-----| 0 -> [RegExpCharacterClass] [[a-f] -#-----| 1 -> [RegExpConstant, RegExpNormalChar] A-F] - -# 43| [RegExpConstant, RegExpNormalChar] [ - -# 43| [RegExpConstant, RegExpNormalChar] a - -# 43| [RegExpCharacterRange] a-f -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpNormalChar] f - -# 43| [RegExpConstant, RegExpNormalChar] f - -# 43| [RegExpConstant, RegExpNormalChar] A-F] - -# 46| [RegExpDot] . - -# 46| [RegExpStar] .* -#-----| 0 -> [RegExpDot] . - -# 47| [RegExpDot] . - -# 47| [RegExpStar] .* -#-----| 0 -> [RegExpDot] . - -# 48| [RegExpCharacterClassEscape] \w - -# 48| [RegExpPlus] \w+ -#-----| 0 -> [RegExpCharacterClassEscape] \w - -# 48| [RegExpSequence] \w+\W -#-----| 0 -> [RegExpPlus] \w+ -#-----| 1 -> [RegExpCharacterClassEscape] \W - -# 48| [RegExpCharacterClassEscape] \W - -# 49| [RegExpCharacterClassEscape] \s - -# 49| [RegExpSequence] \s\S -#-----| 0 -> [RegExpCharacterClassEscape] \s -#-----| 1 -> [RegExpCharacterClassEscape] \S - -# 49| [RegExpCharacterClassEscape] \S - -# 50| [RegExpCharacterClassEscape] \d - -# 50| [RegExpSequence] \d\D -#-----| 0 -> [RegExpCharacterClassEscape] \d -#-----| 1 -> [RegExpCharacterClassEscape] \D - -# 50| [RegExpCharacterClassEscape] \D - -# 51| [RegExpCharacterClassEscape] \h - -# 51| [RegExpSequence] \h\H -#-----| 0 -> [RegExpCharacterClassEscape] \h -#-----| 1 -> [RegExpCharacterClassEscape] \H - -# 51| [RegExpCharacterClassEscape] \H - -# 52| [RegExpConstant, RegExpEscape] \n - -# 52| [RegExpSequence] \n\r\t -#-----| 0 -> [RegExpConstant, RegExpEscape] \n -#-----| 1 -> [RegExpConstant, RegExpEscape] \r -#-----| 2 -> [RegExpConstant, RegExpEscape] \t - -# 52| [RegExpConstant, RegExpEscape] \r - -# 52| [RegExpConstant, RegExpEscape] \t - -# 55| [RegExpSpecialChar] \G - -# 55| [RegExpSequence] \Gabc -#-----| 0 -> [RegExpSpecialChar] \G -#-----| 1 -> [RegExpConstant, RegExpNormalChar] abc - -# 55| [RegExpConstant, RegExpNormalChar] abc - -# 56| [RegExpSpecialChar] \b - -# 56| [RegExpSequence] \b!a\B -#-----| 0 -> [RegExpSpecialChar] \b -#-----| 1 -> [RegExpConstant, RegExpNormalChar] !a -#-----| 2 -> [RegExpNonWordBoundary] \B - -# 56| [RegExpConstant, RegExpNormalChar] !a - -# 56| [RegExpNonWordBoundary] \B - -# 59| [RegExpGroup] (foo) -#-----| 0 -> [RegExpConstant, RegExpNormalChar] foo - -# 59| [RegExpStar] (foo)* -#-----| 0 -> [RegExpGroup] (foo) - -# 59| [RegExpSequence] (foo)*bar -#-----| 0 -> [RegExpStar] (foo)* -#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar - -# 59| [RegExpConstant, RegExpNormalChar] foo - -# 59| [RegExpConstant, RegExpNormalChar] bar - -# 60| [RegExpConstant, RegExpNormalChar] fo - -# 60| [RegExpSequence] fo(o|b)ar -#-----| 0 -> [RegExpConstant, RegExpNormalChar] fo -#-----| 1 -> [RegExpGroup] (o|b) -#-----| 2 -> [RegExpConstant, RegExpNormalChar] ar - -# 60| [RegExpGroup] (o|b) -#-----| 0 -> [RegExpAlt] o|b - -# 60| [RegExpConstant, RegExpNormalChar] o - -# 60| [RegExpAlt] o|b -#-----| 0 -> [RegExpConstant, RegExpNormalChar] o #-----| 1 -> [RegExpConstant, RegExpNormalChar] b +#-----| 2 -> [RegExpConstant, RegExpNormalChar] c -# 60| [RegExpConstant, RegExpNormalChar] b - -# 60| [RegExpConstant, RegExpNormalChar] ar - -# 61| [RegExpGroup] (a|b|cd) -#-----| 0 -> [RegExpAlt] a|b|cd - -# 61| [RegExpSequence] (a|b|cd)e -#-----| 0 -> [RegExpGroup] (a|b|cd) -#-----| 1 -> [RegExpConstant, RegExpNormalChar] e - -# 61| [RegExpConstant, RegExpNormalChar] a - -# 61| [RegExpAlt] a|b|cd +#-----| [RegExpAlt] a|b|cd #-----| 0 -> [RegExpConstant, RegExpNormalChar] a #-----| 1 -> [RegExpConstant, RegExpNormalChar] b #-----| 2 -> [RegExpConstant, RegExpNormalChar] cd -# 61| [RegExpConstant, RegExpNormalChar] b - -# 61| [RegExpConstant, RegExpNormalChar] cd - -# 61| [RegExpConstant, RegExpNormalChar] e - -# 62| [RegExpGroup] (?::+) -#-----| 0 -> [RegExpPlus] :+ - -# 62| [RegExpSequence] (?::+)\w -#-----| 0 -> [RegExpGroup] (?::+) -#-----| 1 -> [RegExpCharacterClassEscape] \w - -# 62| [RegExpConstant, RegExpNormalChar] : - -# 62| [RegExpPlus] :+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] : - -# 62| [RegExpCharacterClassEscape] \w - -# 65| [RegExpGroup] (?\w+) -#-----| 0 -> [RegExpPlus] \w+ - -# 65| [RegExpCharacterClassEscape] \w - -# 65| [RegExpPlus] \w+ -#-----| 0 -> [RegExpCharacterClassEscape] \w - -# 66| [RegExpGroup] (?'foo'fo+) -#-----| 0 -> [RegExpSequence] fo+ - -# 66| [RegExpConstant, RegExpNormalChar] f - -# 66| [RegExpSequence] fo+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] f -#-----| 1 -> [RegExpPlus] o+ - -# 66| [RegExpConstant, RegExpNormalChar] o - -# 66| [RegExpPlus] o+ +#-----| [RegExpAlt] o|b #-----| 0 -> [RegExpConstant, RegExpNormalChar] o +#-----| 1 -> [RegExpConstant, RegExpNormalChar] b -# 69| [RegExpGroup] (a+) -#-----| 0 -> [RegExpPlus] a+ +#-----| [RegExpAlt] foo|bar +#-----| 0 -> [RegExpConstant, RegExpNormalChar] foo +#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar -# 69| [RegExpSequence] (a+)b+\1 -#-----| 0 -> [RegExpGroup] (a+) -#-----| 1 -> [RegExpPlus] b+ -#-----| 2 -> [RegExpBackRef] \1 - -# 69| [RegExpConstant, RegExpNormalChar] a - -# 69| [RegExpPlus] a+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] a - -# 69| [RegExpConstant, RegExpNormalChar] b - -# 69| [RegExpPlus] b+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] b - -# 69| [RegExpBackRef] \1 - -# 70| [RegExpGroup] (?q+) -#-----| 0 -> [RegExpPlus] q+ - -# 70| [RegExpSequence] (?q+)\s+\k+ -#-----| 0 -> [RegExpGroup] (?q+) -#-----| 1 -> [RegExpPlus] \s+ -#-----| 2 -> [RegExpPlus] \k+ - -# 70| [RegExpConstant, RegExpNormalChar] q - -# 70| [RegExpPlus] q+ -#-----| 0 -> [RegExpConstant, RegExpNormalChar] q - -# 70| [RegExpCharacterClassEscape] \s - -# 70| [RegExpPlus] \s+ -#-----| 0 -> [RegExpCharacterClassEscape] \s - -# 70| [RegExpBackRef] \k - -# 70| [RegExpPlus] \k+ -#-----| 0 -> [RegExpBackRef] \k - -# 73| [RegExpNamedCharacterProperty] \p{Word} - -# 73| [RegExpStar] \p{Word}* -#-----| 0 -> [RegExpNamedCharacterProperty] \p{Word} - -# 74| [RegExpNamedCharacterProperty] \P{Digit} - -# 74| [RegExpPlus] \P{Digit}+ -#-----| 0 -> [RegExpNamedCharacterProperty] \P{Digit} - -# 75| [RegExpNamedCharacterProperty] \p{^Alnum} - -# 75| [RegExpRange] \p{^Alnum}{2,3} -#-----| 0 -> [RegExpNamedCharacterProperty] \p{^Alnum} - -# 76| [RegExpCharacterClass] [a-f\p{Digit}] -#-----| 0 -> [RegExpCharacterRange] a-f -#-----| 1 -> [RegExpNamedCharacterProperty] \p{Digit} - -# 76| [RegExpPlus] [a-f\p{Digit}]+ +#-----| [RegExpPlus] [a-f\p{Digit}]+ #-----| 0 -> [RegExpCharacterClass] [a-f\p{Digit}] -# 76| [RegExpConstant, RegExpNormalChar] a +#-----| [RegExpRange] \p{^Alnum}{2,3} +#-----| 0 -> [RegExpNamedCharacterProperty] \p{^Alnum} -# 76| [RegExpCharacterRange] a-f +#-----| [RegExpPlus] \P{Digit}+ +#-----| 0 -> [RegExpNamedCharacterProperty] \P{Digit} + +#-----| [RegExpStar] \p{Word}* +#-----| 0 -> [RegExpNamedCharacterProperty] \p{Word} + +#-----| [RegExpPlus] q+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] q + +#-----| [RegExpPlus] \s+ +#-----| 0 -> [RegExpCharacterClassEscape] \s + +#-----| [RegExpPlus] \k+ +#-----| 0 -> [RegExpBackRef] \k + +#-----| [RegExpPlus] a+ #-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpNormalChar] f -# 76| [RegExpConstant, RegExpNormalChar] f +#-----| [RegExpPlus] b+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] b -# 76| [RegExpNamedCharacterProperty] \p{Digit} +#-----| [RegExpPlus] o+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] o -# 79| [RegExpCharacterClass] [[:alpha:]] -#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:] +#-----| [RegExpPlus] \w+ +#-----| 0 -> [RegExpCharacterClassEscape] \w -# 79| [RegExpSequence] [[:alpha:]][[:digit:]] -#-----| 0 -> [RegExpCharacterClass] [[:alpha:]] -#-----| 1 -> [RegExpCharacterClass] [[:digit:]] +#-----| [RegExpPlus] :+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] : -# 79| [RegExpNamedCharacterProperty] [:alpha:] +#-----| [RegExpStar] (foo)* +#-----| 0 -> [RegExpGroup] (foo) -# 79| [RegExpCharacterClass] [[:digit:]] -#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:] +#-----| [RegExpPlus] \w+ +#-----| 0 -> [RegExpCharacterClassEscape] \w -# 79| [RegExpNamedCharacterProperty] [:digit:] +#-----| [RegExpStar] .* +#-----| 0 -> [RegExpDot] . -# 82| [RegExpCharacterClass] [[:alpha:][:digit:]] -#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:] -#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:] +#-----| [RegExpStar] .* +#-----| 0 -> [RegExpDot] . -# 82| [RegExpNamedCharacterProperty] [:alpha:] +#-----| [RegExpPlus] [\w]+ +#-----| 0 -> [RegExpCharacterClass] [\w] -# 82| [RegExpNamedCharacterProperty] [:digit:] +#-----| [RegExpOpt] [+-]? +#-----| 0 -> [RegExpCharacterClass] [+-] -# 85| [RegExpCharacterClass] [A-F[:digit:]a-f] -#-----| 0 -> [RegExpCharacterRange] A-F -#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:] -#-----| 2 -> [RegExpCharacterRange] a-f +#-----| [RegExpPlus] \d+ +#-----| 0 -> [RegExpCharacterClassEscape] \d -# 85| [RegExpConstant, RegExpNormalChar] A - -# 85| [RegExpCharacterRange] A-F -#-----| 0 -> [RegExpConstant, RegExpNormalChar] A -#-----| 1 -> [RegExpConstant, RegExpNormalChar] F - -# 85| [RegExpConstant, RegExpNormalChar] F - -# 85| [RegExpNamedCharacterProperty] [:digit:] - -# 85| [RegExpConstant, RegExpNormalChar] a - -# 85| [RegExpCharacterRange] a-f +#-----| [RegExpRange] a{7} #-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpNormalChar] f -# 85| [RegExpConstant, RegExpNormalChar] f - -# 88| [RegExpNamedCharacterProperty] [:digit:] - -# 91| [RegExpConstant, RegExpEscape] \u{987 - -# 94| [RegExpConstant, RegExpNormalChar] a - -# 94| [RegExpSequence] a\nb +#-----| [InfiniteRepetitionQuantifier, RegExpRange] a{3,} #-----| 0 -> [RegExpConstant, RegExpNormalChar] a -#-----| 1 -> [RegExpConstant, RegExpEscape] \n -#-----| 2 -> [RegExpConstant, RegExpNormalChar] b -# 94| [RegExpConstant, RegExpEscape] \n +#-----| [RegExpRange] a{,8} +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a -# 94| [RegExpConstant, RegExpNormalChar] b +#-----| [RegExpRange] a{4,8} +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a -# 95| [RegExpConstant, RegExpNormalChar] abc +#-----| [RegExpStar] a* +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a -# 96| [RegExpConstant, RegExpNormalChar] abc +#-----| [RegExpPlus] b+ +#-----| 0 -> [RegExpConstant, RegExpNormalChar] b -# 97| [RegExpConstant, RegExpNormalChar] abc - -# 98| [RegExpConstant, RegExpNormalChar] abc - -# 99| [RegExpConstant, RegExpNormalChar] abc - -# 100| [RegExpConstant, RegExpNormalChar] abc - -# 101| [RegExpConstant, RegExpNormalChar] abc - -# 102| [RegExpConstant, RegExpNormalChar] abc - -# 103| [RegExpConstant, RegExpNormalChar] abc - -# 104| [RegExpConstant, RegExpNormalChar] abc - -# 105| [RegExpConstant, RegExpNormalChar] abc +#-----| [RegExpOpt] c? +#-----| 0 -> [RegExpConstant, RegExpNormalChar] c diff --git a/cpp/ql/test/library-tests/regex/regexp.expected b/cpp/ql/test/library-tests/regex/regexp.expected index 9cdc2743842..e671353d19f 100644 --- a/cpp/ql/test/library-tests/regex/regexp.expected +++ b/cpp/ql/test/library-tests/regex/regexp.expected @@ -1,297 +1,297 @@ groupName -| regexp.cpp:65:19:65:28 | (?\\w+) | id | -| regexp.cpp:66:19:66:29 | (?'foo'fo+) | foo | -| regexp.cpp:70:21:70:30 | (?q+) | qux | +| file://:0:0:0:0 | (?'foo'fo+) | foo | +| file://:0:0:0:0 | (?\\w+) | id | +| file://:0:0:0:0 | (?q+) | qux | groupNumber -| regexp.cpp:59:20:59:24 | (foo) | 1 | -| regexp.cpp:60:22:60:26 | (o\|b) | 1 | -| regexp.cpp:61:20:61:27 | (a\|b\|cd) | 1 | -| regexp.cpp:66:19:66:29 | (?'foo'fo+) | 1 | -| regexp.cpp:69:21:69:24 | (a+) | 1 | +| file://:0:0:0:0 | (?'foo'fo+) | 1 | +| file://:0:0:0:0 | (a+) | 1 | +| file://:0:0:0:0 | (a\|b\|cd) | 1 | +| file://:0:0:0:0 | (foo) | 1 | +| file://:0:0:0:0 | (o\|b) | 1 | term -| regexp.cpp:18:19:18:21 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:21:20:21:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:21:20:21:21 | a* | RegExpStar | -| regexp.cpp:21:20:21:26 | a*b+c?d | RegExpSequence | -| regexp.cpp:21:22:21:22 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:21:22:21:23 | b+ | RegExpPlus | -| regexp.cpp:21:24:21:24 | c | RegExpConstant,RegExpNormalChar | -| regexp.cpp:21:24:21:25 | c? | RegExpOpt | -| regexp.cpp:21:26:21:26 | d | RegExpConstant,RegExpNormalChar | -| regexp.cpp:22:20:22:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:22:20:22:25 | a{4,8} | RegExpRange | -| regexp.cpp:23:20:23:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:23:20:23:24 | a{,8} | RegExpRange | -| regexp.cpp:24:20:24:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:24:20:24:24 | a{3,} | InfiniteRepetitionQuantifier,RegExpRange | -| regexp.cpp:25:20:25:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:25:20:25:23 | a{7} | RegExpRange | -| regexp.cpp:28:19:28:21 | foo | RegExpConstant,RegExpNormalChar | -| regexp.cpp:28:19:28:25 | foo\|bar | RegExpAlt | -| regexp.cpp:28:23:28:25 | bar | RegExpConstant,RegExpNormalChar | -| regexp.cpp:31:19:31:23 | [abc] | RegExpCharacterClass | -| regexp.cpp:31:20:31:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:31:21:31:21 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:31:22:31:22 | c | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:19:32:30 | [a-fA-F0-9_] | RegExpCharacterClass | -| regexp.cpp:32:20:32:20 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:20:32:22 | a-f | RegExpCharacterRange | -| regexp.cpp:32:22:32:22 | f | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:23:32:23 | A | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:23:32:25 | A-F | RegExpCharacterRange | -| regexp.cpp:32:25:32:25 | F | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:26:32:26 | 0 | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:26:32:28 | 0-9 | RegExpCharacterRange | -| regexp.cpp:32:28:32:28 | 9 | RegExpConstant,RegExpNormalChar | -| regexp.cpp:32:29:32:29 | _ | RegExpConstant,RegExpNormalChar | -| regexp.cpp:33:19:33:20 | \\A | RegExpCaret | -| regexp.cpp:33:19:33:28 | \\A[+-]?\\d+ | RegExpSequence | -| regexp.cpp:33:21:33:24 | [+-] | RegExpCharacterClass | -| regexp.cpp:33:21:33:25 | [+-]? | RegExpOpt | -| regexp.cpp:33:22:33:22 | + | RegExpConstant,RegExpNormalChar | -| regexp.cpp:33:23:33:23 | - | RegExpConstant,RegExpNormalChar | -| regexp.cpp:33:26:33:27 | \\d | RegExpCharacterClassEscape | -| regexp.cpp:33:26:33:28 | \\d+ | RegExpPlus | -| regexp.cpp:34:19:34:22 | [\\w] | RegExpCharacterClass | -| regexp.cpp:34:19:34:23 | [\\w]+ | RegExpPlus | -| regexp.cpp:34:20:34:21 | \\w | RegExpCharacterClassEscape | -| regexp.cpp:35:19:35:20 | \\[ | RegExpConstant,RegExpEscape | -| regexp.cpp:35:19:35:27 | \\[\\][123] | RegExpSequence | -| regexp.cpp:35:21:35:22 | \\] | RegExpConstant,RegExpEscape | -| regexp.cpp:35:23:35:27 | [123] | RegExpCharacterClass | -| regexp.cpp:35:24:35:24 | 1 | RegExpConstant,RegExpNormalChar | -| regexp.cpp:35:25:35:25 | 2 | RegExpConstant,RegExpNormalChar | -| regexp.cpp:35:26:35:26 | 3 | RegExpConstant,RegExpNormalChar | -| regexp.cpp:36:19:36:24 | [^A-Z] | RegExpCharacterClass | -| regexp.cpp:36:21:36:21 | A | RegExpConstant,RegExpNormalChar | -| regexp.cpp:36:21:36:23 | A-Z | RegExpCharacterRange | -| regexp.cpp:36:23:36:23 | Z | RegExpConstant,RegExpNormalChar | -| regexp.cpp:37:19:37:21 | []] | RegExpCharacterClass | -| regexp.cpp:37:20:37:20 | ] | RegExpConstant,RegExpNormalChar | -| regexp.cpp:38:19:38:22 | [^]] | RegExpCharacterClass | -| regexp.cpp:38:21:38:21 | ] | RegExpConstant,RegExpNormalChar | -| regexp.cpp:39:19:39:22 | [^-] | RegExpCharacterClass | -| regexp.cpp:39:21:39:21 | - | RegExpConstant,RegExpNormalChar | -| regexp.cpp:40:20:40:22 | [\|] | RegExpCharacterClass | -| regexp.cpp:40:21:40:21 | \| | RegExpConstant,RegExpNormalChar | -| regexp.cpp:43:22:43:27 | [[a-f] | RegExpCharacterClass | -| regexp.cpp:43:22:43:31 | [[a-f]A-F] | RegExpSequence | -| regexp.cpp:43:23:43:23 | [ | RegExpConstant,RegExpNormalChar | -| regexp.cpp:43:24:43:24 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:43:24:43:26 | a-f | RegExpCharacterRange | -| regexp.cpp:43:26:43:26 | f | RegExpConstant,RegExpNormalChar | -| regexp.cpp:43:28:43:31 | A-F] | RegExpConstant,RegExpNormalChar | -| regexp.cpp:46:21:46:21 | . | RegExpDot | -| regexp.cpp:46:21:46:22 | .* | RegExpStar | -| regexp.cpp:47:22:47:22 | . | RegExpDot | -| regexp.cpp:47:22:47:23 | .* | RegExpStar | -| regexp.cpp:48:21:48:22 | \\w | RegExpCharacterClassEscape | -| regexp.cpp:48:21:48:23 | \\w+ | RegExpPlus | -| regexp.cpp:48:21:48:25 | \\w+\\W | RegExpSequence | -| regexp.cpp:48:24:48:25 | \\W | RegExpCharacterClassEscape | -| regexp.cpp:49:21:49:22 | \\s | RegExpCharacterClassEscape | -| regexp.cpp:49:21:49:24 | \\s\\S | RegExpSequence | -| regexp.cpp:49:23:49:24 | \\S | RegExpCharacterClassEscape | -| regexp.cpp:50:21:50:22 | \\d | RegExpCharacterClassEscape | -| regexp.cpp:50:21:50:24 | \\d\\D | RegExpSequence | -| regexp.cpp:50:23:50:24 | \\D | RegExpCharacterClassEscape | -| regexp.cpp:51:21:51:22 | \\h | RegExpCharacterClassEscape | -| regexp.cpp:51:21:51:24 | \\h\\H | RegExpSequence | -| regexp.cpp:51:23:51:24 | \\H | RegExpCharacterClassEscape | -| regexp.cpp:52:21:52:22 | \\n | RegExpConstant,RegExpEscape | -| regexp.cpp:52:21:52:26 | \\n\\r\\t | RegExpSequence | -| regexp.cpp:52:23:52:24 | \\r | RegExpConstant,RegExpEscape | -| regexp.cpp:52:25:52:26 | \\t | RegExpConstant,RegExpEscape | -| regexp.cpp:55:20:55:21 | \\G | RegExpSpecialChar | -| regexp.cpp:55:20:55:24 | \\Gabc | RegExpSequence | -| regexp.cpp:55:22:55:24 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:56:20:56:21 | \\b | RegExpSpecialChar | -| regexp.cpp:56:20:56:25 | \\b!a\\B | RegExpSequence | -| regexp.cpp:56:22:56:23 | !a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:56:24:56:25 | \\B | RegExpNonWordBoundary | -| regexp.cpp:59:20:59:24 | (foo) | RegExpGroup | -| regexp.cpp:59:20:59:25 | (foo)* | RegExpStar | -| regexp.cpp:59:20:59:28 | (foo)*bar | RegExpSequence | -| regexp.cpp:59:21:59:23 | foo | RegExpConstant,RegExpNormalChar | -| regexp.cpp:59:26:59:28 | bar | RegExpConstant,RegExpNormalChar | -| regexp.cpp:60:20:60:21 | fo | RegExpConstant,RegExpNormalChar | -| regexp.cpp:60:20:60:28 | fo(o\|b)ar | RegExpSequence | -| regexp.cpp:60:22:60:26 | (o\|b) | RegExpGroup | -| regexp.cpp:60:23:60:23 | o | RegExpConstant,RegExpNormalChar | -| regexp.cpp:60:23:60:25 | o\|b | RegExpAlt | -| regexp.cpp:60:25:60:25 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:60:27:60:28 | ar | RegExpConstant,RegExpNormalChar | -| regexp.cpp:61:20:61:27 | (a\|b\|cd) | RegExpGroup | -| regexp.cpp:61:20:61:28 | (a\|b\|cd)e | RegExpSequence | -| regexp.cpp:61:21:61:21 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:61:21:61:26 | a\|b\|cd | RegExpAlt | -| regexp.cpp:61:23:61:23 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:61:25:61:26 | cd | RegExpConstant,RegExpNormalChar | -| regexp.cpp:61:28:61:28 | e | RegExpConstant,RegExpNormalChar | -| regexp.cpp:62:20:62:25 | (?::+) | RegExpGroup | -| regexp.cpp:62:20:62:27 | (?::+)\\w | RegExpSequence | -| regexp.cpp:62:23:62:23 | : | RegExpConstant,RegExpNormalChar | -| regexp.cpp:62:23:62:24 | :+ | RegExpPlus | -| regexp.cpp:62:26:62:27 | \\w | RegExpCharacterClassEscape | -| regexp.cpp:65:19:65:28 | (?\\w+) | RegExpGroup | -| regexp.cpp:65:25:65:26 | \\w | RegExpCharacterClassEscape | -| regexp.cpp:65:25:65:27 | \\w+ | RegExpPlus | -| regexp.cpp:66:19:66:29 | (?'foo'fo+) | RegExpGroup | -| regexp.cpp:66:26:66:26 | f | RegExpConstant,RegExpNormalChar | -| regexp.cpp:66:26:66:28 | fo+ | RegExpSequence | -| regexp.cpp:66:27:66:27 | o | RegExpConstant,RegExpNormalChar | -| regexp.cpp:66:27:66:28 | o+ | RegExpPlus | -| regexp.cpp:69:21:69:24 | (a+) | RegExpGroup | -| regexp.cpp:69:21:69:28 | (a+)b+\\1 | RegExpSequence | -| regexp.cpp:69:22:69:22 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:69:22:69:23 | a+ | RegExpPlus | -| regexp.cpp:69:25:69:25 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:69:25:69:26 | b+ | RegExpPlus | -| regexp.cpp:69:27:69:28 | \\1 | RegExpBackRef | -| regexp.cpp:70:21:70:30 | (?q+) | RegExpGroup | -| regexp.cpp:70:21:70:41 | (?q+)\\s+\\k+ | RegExpSequence | -| regexp.cpp:70:28:70:28 | q | RegExpConstant,RegExpNormalChar | -| regexp.cpp:70:28:70:29 | q+ | RegExpPlus | -| regexp.cpp:70:31:70:32 | \\s | RegExpCharacterClassEscape | -| regexp.cpp:70:31:70:33 | \\s+ | RegExpPlus | -| regexp.cpp:70:34:70:40 | \\k | RegExpBackRef | -| regexp.cpp:70:34:70:41 | \\k+ | RegExpPlus | -| regexp.cpp:73:21:73:28 | \\p{Word} | RegExpNamedCharacterProperty | -| regexp.cpp:73:21:73:29 | \\p{Word}* | RegExpStar | -| regexp.cpp:74:21:74:29 | \\P{Digit} | RegExpNamedCharacterProperty | -| regexp.cpp:74:21:74:30 | \\P{Digit}+ | RegExpPlus | -| regexp.cpp:75:21:75:30 | \\p{^Alnum} | RegExpNamedCharacterProperty | -| regexp.cpp:75:21:75:35 | \\p{^Alnum}{2,3} | RegExpRange | -| regexp.cpp:76:21:76:34 | [a-f\\p{Digit}] | RegExpCharacterClass | -| regexp.cpp:76:21:76:35 | [a-f\\p{Digit}]+ | RegExpPlus | -| regexp.cpp:76:22:76:22 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:76:22:76:24 | a-f | RegExpCharacterRange | -| regexp.cpp:76:24:76:24 | f | RegExpConstant,RegExpNormalChar | -| regexp.cpp:76:25:76:33 | \\p{Digit} | RegExpNamedCharacterProperty | -| regexp.cpp:79:22:79:32 | [[:alpha:]] | RegExpCharacterClass | -| regexp.cpp:79:22:79:43 | [[:alpha:]][[:digit:]] | RegExpSequence | -| regexp.cpp:79:23:79:31 | [:alpha:] | RegExpNamedCharacterProperty | -| regexp.cpp:79:33:79:43 | [[:digit:]] | RegExpCharacterClass | -| regexp.cpp:79:34:79:42 | [:digit:] | RegExpNamedCharacterProperty | -| regexp.cpp:82:22:82:41 | [[:alpha:][:digit:]] | RegExpCharacterClass | -| regexp.cpp:82:23:82:31 | [:alpha:] | RegExpNamedCharacterProperty | -| regexp.cpp:82:32:82:40 | [:digit:] | RegExpNamedCharacterProperty | -| regexp.cpp:85:22:85:38 | [A-F[:digit:]a-f] | RegExpCharacterClass | -| regexp.cpp:85:23:85:23 | A | RegExpConstant,RegExpNormalChar | -| regexp.cpp:85:23:85:25 | A-F | RegExpCharacterRange | -| regexp.cpp:85:25:85:25 | F | RegExpConstant,RegExpNormalChar | -| regexp.cpp:85:26:85:34 | [:digit:] | RegExpNamedCharacterProperty | -| regexp.cpp:85:35:85:35 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:85:35:85:37 | a-f | RegExpCharacterRange | -| regexp.cpp:85:37:85:37 | f | RegExpConstant,RegExpNormalChar | -| regexp.cpp:88:22:88:30 | [:digit:] | RegExpNamedCharacterProperty | -| regexp.cpp:91:19:91:24 | \\u{987 | RegExpConstant,RegExpEscape | -| regexp.cpp:94:25:94:25 | a | RegExpConstant,RegExpNormalChar | -| regexp.cpp:94:25:94:28 | a\\nb | RegExpSequence | -| regexp.cpp:94:26:94:27 | \\n | RegExpConstant,RegExpEscape | -| regexp.cpp:94:28:94:28 | b | RegExpConstant,RegExpNormalChar | -| regexp.cpp:95:36:95:38 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:96:34:96:36 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:97:37:97:39 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:98:37:98:39 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:99:21:99:23 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:100:37:100:39 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:101:35:101:37 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:102:38:102:40 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:103:38:103:40 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:104:22:104:24 | abc | RegExpConstant,RegExpNormalChar | -| regexp.cpp:105:24:105:26 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | 0 | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | 0-9 | RegExpCharacterRange | +| file://:0:0:0:0 | 1 | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | 2 | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | 3 | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | 9 | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | !a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | (?'foo'fo+) | RegExpGroup | +| file://:0:0:0:0 | (?::+) | RegExpGroup | +| file://:0:0:0:0 | (?::+)\\w | RegExpSequence | +| file://:0:0:0:0 | (?\\w+) | RegExpGroup | +| file://:0:0:0:0 | (?q+) | RegExpGroup | +| file://:0:0:0:0 | (?q+)\\s+\\k+ | RegExpSequence | +| file://:0:0:0:0 | (a+) | RegExpGroup | +| file://:0:0:0:0 | (a+)b+\\1 | RegExpSequence | +| file://:0:0:0:0 | (a\|b\|cd) | RegExpGroup | +| file://:0:0:0:0 | (a\|b\|cd)e | RegExpSequence | +| file://:0:0:0:0 | (foo) | RegExpGroup | +| file://:0:0:0:0 | (foo)* | RegExpStar | +| file://:0:0:0:0 | (foo)*bar | RegExpSequence | +| file://:0:0:0:0 | (o\|b) | RegExpGroup | +| file://:0:0:0:0 | + | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | - | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | - | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | . | RegExpDot | +| file://:0:0:0:0 | . | RegExpDot | +| file://:0:0:0:0 | .* | RegExpStar | +| file://:0:0:0:0 | .* | RegExpStar | +| file://:0:0:0:0 | : | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | :+ | RegExpPlus | +| file://:0:0:0:0 | A | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | A | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | A | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | A-F | RegExpCharacterRange | +| file://:0:0:0:0 | A-F | RegExpCharacterRange | +| file://:0:0:0:0 | A-F] | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | A-Z | RegExpCharacterRange | +| file://:0:0:0:0 | F | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | F | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | Z | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | [ | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | [123] | RegExpCharacterClass | +| file://:0:0:0:0 | [+-] | RegExpCharacterClass | +| file://:0:0:0:0 | [+-]? | RegExpOpt | +| file://:0:0:0:0 | [:alpha:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [:alpha:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [:digit:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [:digit:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [:digit:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [:digit:] | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | [A-F[:digit:]a-f] | RegExpCharacterClass | +| file://:0:0:0:0 | [[:alpha:][:digit:]] | RegExpCharacterClass | +| file://:0:0:0:0 | [[:alpha:]] | RegExpCharacterClass | +| file://:0:0:0:0 | [[:alpha:]][[:digit:]] | RegExpSequence | +| file://:0:0:0:0 | [[:digit:]] | RegExpCharacterClass | +| file://:0:0:0:0 | [[a-f] | RegExpCharacterClass | +| file://:0:0:0:0 | [[a-f]A-F] | RegExpSequence | +| file://:0:0:0:0 | [\\w] | RegExpCharacterClass | +| file://:0:0:0:0 | [\\w]+ | RegExpPlus | +| file://:0:0:0:0 | [\|] | RegExpCharacterClass | +| file://:0:0:0:0 | []] | RegExpCharacterClass | +| file://:0:0:0:0 | [^-] | RegExpCharacterClass | +| file://:0:0:0:0 | [^A-Z] | RegExpCharacterClass | +| file://:0:0:0:0 | [^]] | RegExpCharacterClass | +| file://:0:0:0:0 | [a-fA-F0-9_] | RegExpCharacterClass | +| file://:0:0:0:0 | [a-f\\p{Digit}] | RegExpCharacterClass | +| file://:0:0:0:0 | [a-f\\p{Digit}]+ | RegExpPlus | +| file://:0:0:0:0 | [abc] | RegExpCharacterClass | +| file://:0:0:0:0 | \\1 | RegExpBackRef | +| file://:0:0:0:0 | \\A | RegExpCaret | +| file://:0:0:0:0 | \\A[+-]?\\d+ | RegExpSequence | +| file://:0:0:0:0 | \\B | RegExpNonWordBoundary | +| file://:0:0:0:0 | \\D | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\G | RegExpSpecialChar | +| file://:0:0:0:0 | \\Gabc | RegExpSequence | +| file://:0:0:0:0 | \\H | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\P{Digit} | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | \\P{Digit}+ | RegExpPlus | +| file://:0:0:0:0 | \\S | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\W | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\[ | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\[\\][123] | RegExpSequence | +| file://:0:0:0:0 | \\] | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\b | RegExpSpecialChar | +| file://:0:0:0:0 | \\b!a\\B | RegExpSequence | +| file://:0:0:0:0 | \\d | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\d | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\d+ | RegExpPlus | +| file://:0:0:0:0 | \\d\\D | RegExpSequence | +| file://:0:0:0:0 | \\h | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\h\\H | RegExpSequence | +| file://:0:0:0:0 | \\k | RegExpBackRef | +| file://:0:0:0:0 | \\k+ | RegExpPlus | +| file://:0:0:0:0 | \\n | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\n | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\n\\r\\t | RegExpSequence | +| file://:0:0:0:0 | \\p{Digit} | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | \\p{Word} | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | \\p{Word}* | RegExpStar | +| file://:0:0:0:0 | \\p{^Alnum} | RegExpNamedCharacterProperty | +| file://:0:0:0:0 | \\p{^Alnum}{2,3} | RegExpRange | +| file://:0:0:0:0 | \\r | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\s | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\s | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\s+ | RegExpPlus | +| file://:0:0:0:0 | \\s\\S | RegExpSequence | +| file://:0:0:0:0 | \\t | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\u{987 | RegExpConstant,RegExpEscape | +| file://:0:0:0:0 | \\w | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\w | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\w | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\w | RegExpCharacterClassEscape | +| file://:0:0:0:0 | \\w+ | RegExpPlus | +| file://:0:0:0:0 | \\w+ | RegExpPlus | +| file://:0:0:0:0 | \\w+\\W | RegExpSequence | +| file://:0:0:0:0 | \| | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | ] | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | ] | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | _ | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a* | RegExpStar | +| file://:0:0:0:0 | a*b+c?d | RegExpSequence | +| file://:0:0:0:0 | a+ | RegExpPlus | +| file://:0:0:0:0 | a-f | RegExpCharacterRange | +| file://:0:0:0:0 | a-f | RegExpCharacterRange | +| file://:0:0:0:0 | a-f | RegExpCharacterRange | +| file://:0:0:0:0 | a-f | RegExpCharacterRange | +| file://:0:0:0:0 | a\\nb | RegExpSequence | +| file://:0:0:0:0 | a\|b\|cd | RegExpAlt | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | abc | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | ar | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | a{3,} | InfiniteRepetitionQuantifier,RegExpRange | +| file://:0:0:0:0 | a{4,8} | RegExpRange | +| file://:0:0:0:0 | a{7} | RegExpRange | +| file://:0:0:0:0 | a{,8} | RegExpRange | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | b+ | RegExpPlus | +| file://:0:0:0:0 | b+ | RegExpPlus | +| file://:0:0:0:0 | bar | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | bar | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | c | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | c | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | c? | RegExpOpt | +| file://:0:0:0:0 | cd | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | d | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | e | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | f | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | f | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | f | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | f | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | f | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | fo | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | fo(o\|b)ar | RegExpSequence | +| file://:0:0:0:0 | fo+ | RegExpSequence | +| file://:0:0:0:0 | foo | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | foo | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | foo\|bar | RegExpAlt | +| file://:0:0:0:0 | o | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | o | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | o+ | RegExpPlus | +| file://:0:0:0:0 | o\|b | RegExpAlt | +| file://:0:0:0:0 | q | RegExpConstant,RegExpNormalChar | +| file://:0:0:0:0 | q+ | RegExpPlus | regExpNormalCharValue -| regexp.cpp:18:19:18:21 | abc | abc | -| regexp.cpp:21:20:21:20 | a | a | -| regexp.cpp:21:22:21:22 | b | b | -| regexp.cpp:21:24:21:24 | c | c | -| regexp.cpp:21:26:21:26 | d | d | -| regexp.cpp:22:20:22:20 | a | a | -| regexp.cpp:23:20:23:20 | a | a | -| regexp.cpp:24:20:24:20 | a | a | -| regexp.cpp:25:20:25:20 | a | a | -| regexp.cpp:28:19:28:21 | foo | foo | -| regexp.cpp:28:23:28:25 | bar | bar | -| regexp.cpp:31:20:31:20 | a | a | -| regexp.cpp:31:21:31:21 | b | b | -| regexp.cpp:31:22:31:22 | c | c | -| regexp.cpp:32:20:32:20 | a | a | -| regexp.cpp:32:22:32:22 | f | f | -| regexp.cpp:32:23:32:23 | A | A | -| regexp.cpp:32:25:32:25 | F | F | -| regexp.cpp:32:26:32:26 | 0 | 0 | -| regexp.cpp:32:28:32:28 | 9 | 9 | -| regexp.cpp:32:29:32:29 | _ | _ | -| regexp.cpp:33:22:33:22 | + | + | -| regexp.cpp:33:23:33:23 | - | - | -| regexp.cpp:33:26:33:27 | \\d | d | -| regexp.cpp:34:20:34:21 | \\w | w | -| regexp.cpp:35:19:35:20 | \\[ | [ | -| regexp.cpp:35:21:35:22 | \\] | ] | -| regexp.cpp:35:24:35:24 | 1 | 1 | -| regexp.cpp:35:25:35:25 | 2 | 2 | -| regexp.cpp:35:26:35:26 | 3 | 3 | -| regexp.cpp:36:21:36:21 | A | A | -| regexp.cpp:36:23:36:23 | Z | Z | -| regexp.cpp:37:20:37:20 | ] | ] | -| regexp.cpp:38:21:38:21 | ] | ] | -| regexp.cpp:39:21:39:21 | - | - | -| regexp.cpp:40:21:40:21 | \| | \| | -| regexp.cpp:43:23:43:23 | [ | [ | -| regexp.cpp:43:24:43:24 | a | a | -| regexp.cpp:43:26:43:26 | f | f | -| regexp.cpp:43:28:43:31 | A-F] | A-F] | -| regexp.cpp:48:21:48:22 | \\w | w | -| regexp.cpp:48:24:48:25 | \\W | W | -| regexp.cpp:49:21:49:22 | \\s | s | -| regexp.cpp:49:23:49:24 | \\S | S | -| regexp.cpp:50:21:50:22 | \\d | d | -| regexp.cpp:50:23:50:24 | \\D | D | -| regexp.cpp:51:21:51:22 | \\h | h | -| regexp.cpp:51:23:51:24 | \\H | H | -| regexp.cpp:52:21:52:22 | \\n | \n | -| regexp.cpp:52:23:52:24 | \\r | \r | -| regexp.cpp:52:25:52:26 | \\t | \t | -| regexp.cpp:55:22:55:24 | abc | abc | -| regexp.cpp:56:22:56:23 | !a | !a | -| regexp.cpp:59:21:59:23 | foo | foo | -| regexp.cpp:59:26:59:28 | bar | bar | -| regexp.cpp:60:20:60:21 | fo | fo | -| regexp.cpp:60:23:60:23 | o | o | -| regexp.cpp:60:25:60:25 | b | b | -| regexp.cpp:60:27:60:28 | ar | ar | -| regexp.cpp:61:21:61:21 | a | a | -| regexp.cpp:61:23:61:23 | b | b | -| regexp.cpp:61:25:61:26 | cd | cd | -| regexp.cpp:61:28:61:28 | e | e | -| regexp.cpp:62:23:62:23 | : | : | -| regexp.cpp:62:26:62:27 | \\w | w | -| regexp.cpp:65:25:65:26 | \\w | w | -| regexp.cpp:66:26:66:26 | f | f | -| regexp.cpp:66:27:66:27 | o | o | -| regexp.cpp:69:22:69:22 | a | a | -| regexp.cpp:69:25:69:25 | b | b | -| regexp.cpp:70:28:70:28 | q | q | -| regexp.cpp:70:31:70:32 | \\s | s | -| regexp.cpp:76:22:76:22 | a | a | -| regexp.cpp:76:24:76:24 | f | f | -| regexp.cpp:85:23:85:23 | A | A | -| regexp.cpp:85:25:85:25 | F | F | -| regexp.cpp:85:35:85:35 | a | a | -| regexp.cpp:85:37:85:37 | f | f | -| regexp.cpp:91:19:91:24 | \\u{987 | \u0987 | -| regexp.cpp:94:25:94:25 | a | a | -| regexp.cpp:94:26:94:27 | \\n | \n | -| regexp.cpp:94:28:94:28 | b | b | -| regexp.cpp:95:36:95:38 | abc | abc | -| regexp.cpp:96:34:96:36 | abc | abc | -| regexp.cpp:97:37:97:39 | abc | abc | -| regexp.cpp:98:37:98:39 | abc | abc | -| regexp.cpp:99:21:99:23 | abc | abc | -| regexp.cpp:100:37:100:39 | abc | abc | -| regexp.cpp:101:35:101:37 | abc | abc | -| regexp.cpp:102:38:102:40 | abc | abc | -| regexp.cpp:103:38:103:40 | abc | abc | -| regexp.cpp:104:22:104:24 | abc | abc | -| regexp.cpp:105:24:105:26 | abc | abc | +| file://:0:0:0:0 | 0 | 0 | +| file://:0:0:0:0 | 1 | 1 | +| file://:0:0:0:0 | 2 | 2 | +| file://:0:0:0:0 | 3 | 3 | +| file://:0:0:0:0 | 9 | 9 | +| file://:0:0:0:0 | !a | !a | +| file://:0:0:0:0 | + | + | +| file://:0:0:0:0 | - | - | +| file://:0:0:0:0 | - | - | +| file://:0:0:0:0 | : | : | +| file://:0:0:0:0 | A | A | +| file://:0:0:0:0 | A | A | +| file://:0:0:0:0 | A | A | +| file://:0:0:0:0 | A-F] | A-F] | +| file://:0:0:0:0 | F | F | +| file://:0:0:0:0 | F | F | +| file://:0:0:0:0 | Z | Z | +| file://:0:0:0:0 | [ | [ | +| file://:0:0:0:0 | \\D | D | +| file://:0:0:0:0 | \\H | H | +| file://:0:0:0:0 | \\S | S | +| file://:0:0:0:0 | \\W | W | +| file://:0:0:0:0 | \\[ | [ | +| file://:0:0:0:0 | \\] | ] | +| file://:0:0:0:0 | \\d | d | +| file://:0:0:0:0 | \\d | d | +| file://:0:0:0:0 | \\h | h | +| file://:0:0:0:0 | \\n | \n | +| file://:0:0:0:0 | \\n | \n | +| file://:0:0:0:0 | \\r | \r | +| file://:0:0:0:0 | \\s | s | +| file://:0:0:0:0 | \\s | s | +| file://:0:0:0:0 | \\t | \t | +| file://:0:0:0:0 | \\u{987 | \u0987 | +| file://:0:0:0:0 | \\w | w | +| file://:0:0:0:0 | \\w | w | +| file://:0:0:0:0 | \\w | w | +| file://:0:0:0:0 | \\w | w | +| file://:0:0:0:0 | \| | \| | +| file://:0:0:0:0 | ] | ] | +| file://:0:0:0:0 | ] | ] | +| file://:0:0:0:0 | _ | _ | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | a | a | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | abc | abc | +| file://:0:0:0:0 | ar | ar | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | b | b | +| file://:0:0:0:0 | bar | bar | +| file://:0:0:0:0 | bar | bar | +| file://:0:0:0:0 | c | c | +| file://:0:0:0:0 | c | c | +| file://:0:0:0:0 | cd | cd | +| file://:0:0:0:0 | d | d | +| file://:0:0:0:0 | e | e | +| file://:0:0:0:0 | f | f | +| file://:0:0:0:0 | f | f | +| file://:0:0:0:0 | f | f | +| file://:0:0:0:0 | f | f | +| file://:0:0:0:0 | f | f | +| file://:0:0:0:0 | fo | fo | +| file://:0:0:0:0 | foo | foo | +| file://:0:0:0:0 | foo | foo | +| file://:0:0:0:0 | o | o | +| file://:0:0:0:0 | o | o | +| file://:0:0:0:0 | q | q |