1# Future self: the delimiter is an ASCII vertical bar, which is also a 2# REGEX special character, but hadn't already been used. Nearly every 3# other plain ASCII character had been used by a test. Characters 4# outside the plain ASCII range have a risk of being mangled by modern 5# editors. So, avoid using | in a test, or if needed, select a new 6# delimeter. 7# 2.8.2 Regular Expression General Requirement 82|4|bb*|abbbc| 92|2|bb*|ababbbc| 107|9|A#*::|A:A#:qA::qA#::qA##::q| 111|5|A#*::|A##::A#::qA::qA#:q| 12# 2.8.3.1.2 BRE Special Characters 13# GA108 142|2|\.|a.c| 152|2|\[|a[c| 162|2|\\|a\c| 172|2|\*|a*c| 182|2|\^|a^c| 192|2|\$|a$c| 207|11|X\*Y\*8|Y*8X*8X*Y*8| 21# GA109 222|2|[.]|a.c| 232|2|[[]|a[c| 24-1|-1|[[]|ac| 252|2|[\]|a\c| 261|1|[\a]|abc| 272|2|[\.]|a\.c| 282|2|[\.]|a.\c| 292|2|[*]|a*c| 302|2|[$]|a$c| 312|2|[X*Y8]|7*8YX| 32# GA110 332|2|*|a*c| 343|4|*a|*b*a*c| 351|5|**9=|***9=9| 36# GA111 371|1|^*|*bc| 38-1|-1|^*|a*c| 39-1|-1|^*|^*ab| 401|5|^**9=|***9=| 41-1|-1|^*5<*9|5<9*5<*9| 42# GA112 432|3|\(*b\)|a*b| 44-1|-1|\(*b\)|ac| 451|6|A\(**9\)=|A***9=79| 46# GA113(1) 471|3|\(^*ab\)|*ab| 48-1|-1|\(^*ab\)|^*ab| 49-1|-1|\(^*b\)|a*b| 50-1|-1|\(^*b\)|^*b| 51### GA113(2) GNU regex implements GA113(1) 52##-1|-1|\(^*ab\)|*ab| 53##-1|-1|\(^*ab\)|^*ab| 54##1|1|\(^*b\)|b| 55##1|3|\(^*b\)|^^b| 56# GA114 571|3|a^b|a^b| 581|3|a\^b|a^b| 591|1|^^|^bc| 602|2|\^|a^c| 611|1|[c^b]|^abc| 621|1|[\^ab]|^ab| 632|2|[\^ab]|c\d| 64-1|-1|[^^]|^| 651|3|\(a^b\)|a^b| 661|3|\(a\^b\)|a^b| 672|2|\(\^\)|a^b| 68# GA115 693|3|$$|ab$| 70-1|-1|$$|$ab| 712|3|$c|a$c| 722|2|[$]|a$c| 731|2|\$a|$a| 743|3|\$$|ab$| 752|6|A\([34]$[34]\)B|XA4$3BY| 76# 2.8.3.1.3 Periods in BREs 77# GA116 781|1|.|abc| 79-1|-1|.ab|abc| 801|3|ab.|abc| 811|3|a.b|a,b| 82-1|-1|.......|PqRs6| 831|7|.......|PqRs6T8| 84# 2.8.3.2 RE Bracket Expression 85# GA118 862|2|[abc]|xbyz| 87-1|-1|[abc]|xyz| 882|2|[abc]|xbay| 89# GA119 902|2|[^a]|abc| 914|4|[^]cd]|cd]ef| 922|2|[^abc]|axyz| 93-1|-1|[^abc]|abc| 943|3|[^[.a.]b]|abc| 953|3|[^[=a=]b]|abc| 962|2|[^-ac]|abcde-| 972|2|[^ac-]|abcde-| 983|3|[^a-b]|abcde| 993|3|[^a-bd-e]|dec| 1002|2|[^---]|-ab| 10116|16|[^a-zA-Z0-9]|pqrstVWXYZ23579#| 102# GA120(1) 1033|3|[]a]|cd]ef| 1041|1|[]-a]|a_b| 1053|3|[][.-.]-0]|ab0-]| 1061|1|[]^a-z]|string| 107# GA120(2) 1084|4|[^]cd]|cd]ef| 1090|0|[^]]*|]]]]]]]]X| 1100|0|[^]]*|]]]]]]]]| 1119|9|[^]]\{1,\}|]]]]]]]]X| 112-1|-1|[^]]\{1,\}|]]]]]]]]| 113# GA120(3) 1143|3|[c[.].]d]|ab]cd| 1152|8|[a-z]*[[.].]][A-Z]*|Abcd]DEFg| 116# GA121 1172|2|[[.a.]b]|Abc| 1181|1|[[.a.]b]|aBc| 119-1|-1|[[.a.]b]|ABc| 1203|3|[^[.a.]b]|abc| 1213|3|[][.-.]-0]|ab0-]| 1223|3|[A-[.].]c]|ab]!| 123# GA122 124-2|-2|[[.ch.]]|abc| 125-2|-2|[[.ab.][.CD.][.EF.]]|yZabCDEFQ9| 126# GA125 1272|2|[[=a=]b]|Abc| 1281|1|[[=a=]b]|aBc| 129-1|-1|[[=a=]b]|ABc| 1303|3|[^[=a=]b]|abc| 131# GA126 132#W the expected result for [[:alnum:]]* is 2-7 which is wrong 1330|0|[[:alnum:]]*| aB28gH| 1342|7|[[:alnum:]][[:alnum:]]*| aB28gH| 135#W the expected result for [^[:alnum:]]* is 2-5 which is wrong 1360|0|[^[:alnum:]]*|2 ,a| 1372|5|[^[:alnum:]][^[:alnum:]]*|2 ,a| 138#W the expected result for [[:alpha:]]* is 2-5 which is wrong 1390|0|[[:alpha:]]*| aBgH2| 1402|5|[[:alpha:]][[:alpha:]]*| aBgH2| 1411|6|[^[:alpha:]]*|2 8,a| 1421|2|[[:blank:]]*| 142| 1431|8|[^[:blank:]]*|aB28gH, | 1441|2|[[:cntrl:]]*| | 1451|8|[^[:cntrl:]]*|aB2 8gh,| 146#W the expected result for [[:digit:]]* is 2-3 which is wrong 1470|0|[[:digit:]]*|a28| 1482|3|[[:digit:]][[:digit:]]*|a28| 1491|8|[^[:digit:]]*|aB gH,| 1501|7|[[:graph:]]*|aB28gH, | 1511|3|[^[:graph:]]*| ,| 1521|2|[[:lower:]]*|agB| 1531|8|[^[:lower:]]*|B2 8H,a| 1541|8|[[:print:]]*|aB2 8gH, | 1551|2|[^[:print:]]*| | 156#W the expected result for [[:punct:]]* is 2-2 which is wrong 1570|0|[[:punct:]]*|a,2| 1582|3|[[:punct:]][[:punct:]]*|a,,2| 1591|9|[^[:punct:]]*|aB2 8gH| 1601|3|[[:space:]]*| 160| 161#W the expected result for [^[:space:]]* is 2-9 which is wrong 1620|0|[^[:space:]]*| aB28gH, | 1632|9|[^[:space:]][^[:space:]]*| aB28gH, | 164#W the expected result for [[:upper:]]* is 2-3 which is wrong 1650|0|[[:upper:]]*|aBH2| 1662|3|[[:upper:]][[:upper:]]*|aBH2| 1671|8|[^[:upper:]]*|a2 8g,B| 168#W the expected result for [[:xdigit:]]* is 2-5 which is wrong 1690|0|[[:xdigit:]]*|gaB28h| 1702|5|[[:xdigit:]][[:xdigit:]]*|gaB28h| 171#W the expected result for [^[:xdigit:]]* is 2-7 which is wrong 1722|7|[^[:xdigit:]][^[:xdigit:]]*|a gH,2| 173# GA127 174-2|-2|[b-a]|abc| 1751|1|[a-c]|bbccde| 1762|2|[a-b]|-bc| 1773|3|[a-z0-9]|AB0| 1783|3|[^a-b]|abcde| 1793|3|[^a-bd-e]|dec| 1801|1|[]-a]|a_b| 1812|2|[+--]|a,b| 1822|2|[--/]|a.b| 1832|2|[^---]|-ab| 1843|3|[][.-.]-0]|ab0-]| 1853|3|[A-[.].]c]|ab]!| 1862|6|bc[d-w]xy|abchxyz| 187# GA129 1881|1|[a-cd-f]|dbccde| 189-1|-1|[a-ce-f]|dBCCdE| 1902|4|b[n-zA-M]Y|absY9Z| 1912|4|b[n-zA-M]Y|abGY9Z| 192# GA130 1933|3|[-xy]|ac-| 1942|4|c[-xy]D|ac-D+| 1952|2|[--/]|a.b| 1962|4|c[--/]D|ac.D+b| 1972|2|[^-ac]|abcde-| 1981|3|a[^-ac]c|abcde-| 1993|3|[xy-]|zc-| 2002|4|c[xy-]7|zc-786| 2012|2|[^ac-]|abcde-| 2022|4|a[^ac-]c|5abcde-| 2032|2|[+--]|a,b| 2042|4|a[+--]B|Xa,By| 2052|2|[^---]|-ab| 2064|6|X[^---]Y|X-YXaYXbY| 207# 2.8.3.3 BREs Matching Multiple Characters 208# GA131 2093|4|cd|abcdeabcde| 2101|2|ag*b|abcde| 211-1|-1|[a-c][e-f]|abcdef| 2123|4|[a-c][e-f]|acbedf| 2134|8|abc*XYZ|890abXYZ#*| 2144|9|abc*XYZ|890abcXYZ#*| 2154|15|abc*XYZ|890abcccccccXYZ#*| 216-1|-1|abc*XYZ|890abc*XYZ#*| 217# GA132 2182|4|\(*bc\)|a*bc| 2191|2|\(ab\)|abcde| 2201|10|\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)|abcdefghijk| 2213|8|43\(2\(6\)*0\)AB|654320ABCD| 2223|9|43\(2\(7\)*0\)AB|6543270ABCD| 2233|12|43\(2\(7\)*0\)AB|6543277770ABCD| 224# GA133 2251|10|\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)|abcdefghijk| 226-1|-1|\(a\(b\(c\(d\(e\(f\(g\)h\(i\(k\)\)\)\)\)\)\)\)|abcdefghijk| 227# GA134 2282|4|\(bb*\)|abbbc| 2292|2|\(bb*\)|ababbbc| 2301|6|a\(.*b\)|ababbbc| 2311|2|a\(b*\)|ababbbc| 2321|20|a\(.*b\)c|axcaxbbbcsxbbbbbbbbc| 233# GA135 2341|7|\(a\(b\(c\(d\(e\)\)\)\)\)\4|abcdededede| 235#W POSIX does not really specify whether a\(b\)*c\1 matches acb. 236#W back references are supposed to expand to the last match, but what 237#W if there never was a match as in this case? 238-1|-1|a\(b\)*c\1|acb| 2391|11|\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)\9|abcdefghijjk| 240# GA136 241#W These two tests have the same problem as the test in GA135. No match 242#W of a subexpression, why should the back reference be usable? 243#W 1 2 a\(b\)*c\1 acb 244#W 4 7 a\(b\(c\(d\(f\)*\)\)\)\4|xYzabcdePQRST 245-1|-1|a\(b\)*c\1|acb| 246-1|-1|a\(b\(c\(d\(f\)*\)\)\)\4|xYzabcdePQRST| 247# GA137 248-2|-2|\(a\(b\)\)\3|foo| 249-2|-2|\(a\(b\)\)\(a\(b\)\)\5|foo| 250# GA138 2511|2|ag*b|abcde| 2521|10|a.*b|abababvbabc| 2532|5|b*c|abbbcdeabbbbbbcde| 2542|5|bbb*c|abbbcdeabbbbbbcde| 2551|5|a\(b\)*c\1|abbcbbb| 256-1|-1|a\(b\)*c\1|abbdbd| 2570|0|\([a-c]*\)\1|abcacdef| 2581|6|\([a-c]*\)\1|abcabcabcd| 2591|2|a^*b|ab| 2601|5|a^*b|a^^^b| 261# GA139 2621|2|a\{2\}|aaaa| 2631|7|\([a-c]*\)\{0,\}|aabcaab| 2641|2|\(a\)\1\{1,2\}|aabc| 2651|3|\(a\)\1\{1,2\}|aaaabc| 266#W the expression \(\(a\)\1\)\{1,2\} is ill-formed, using \2 2671|4|\(\(a\)\2\)\{1,2\}|aaaabc| 268# GA140 2691|2|a\{2\}|aaaa| 270-1|-1|a\{2\}|abcd| 2710|0|a\{0\}|aaaa| 2721|64|a\{64\}|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| 273# GA141 2741|7|\([a-c]*\)\{0,\}|aabcaab| 275#W the expected result for \([a-c]*\)\{2,\} is failure which isn't correct 2761|3|\([a-c]*\)\{2,\}|abcdefg| 2771|3|\([a-c]*\)\{1,\}|abcdefg| 278-1|-1|a\{64,\}|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| 279# GA142 2801|3|a\{2,3\}|aaaa| 281-1|-1|a\{2,3\}|abcd| 2820|0|\([a-c]*\)\{0,0\}|foo| 2831|63|a\{1,63\}|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa| 284# 2.8.3.4 BRE Precedence 285# GA143 286#W There are numerous bugs in the original version. 2872|19|\^\[[[.].]]\\(\\1\\)\*\\{1,2\\}\$|a^[]\(\1\)*\{1,2\}$b| 2881|6|[[=*=]][[=\=]][[=]=]][[===]][[...]][[:punct:]]|*\]=.;| 2891|6|[$\(*\)^]*|$\()*^| 2901|1|[\1]|1| 2911|1|[\{1,2\}]|{| 292#W the expected result for \(*\)*\1* is 2-2 which isn't correct 2930|0|\(*\)*\1*|a*b*11| 2942|3|\(*\)*\1*b|a*b*11| 295#W the expected result for \(a\(b\{1,2\}\)\{1,2\}\) is 1-5 which isn't correct 2961|3|\(a\(b\{1,2\}\)\{1,2\}\)|abbab| 2971|5|\(a\(b\{1,2\}\)\)\{1,2\}|abbab| 2981|1|^\(^\(^a$\)$\)$|a| 2991|2|\(a\)\1$|aa| 3001|3|ab*|abb| 3011|4|ab\{2,4\}|abbbc| 302# 2.8.3.5 BRE Expression Anchoring 303# GA144 3041|1|^a|abc| 305-1|-1|^b|abc| 306-1|-1|^[a-zA-Z]|99Nine| 3071|4|^[a-zA-Z]*|Nine99| 308# GA145(1) 3091|2|\(^a\)\1|aabc| 310-1|-1|\(^a\)\1|^a^abc| 3111|2|\(^^a\)|^a| 3121|1|\(^^\)|^^| 3131|3|\(^abc\)|abcdef| 314-1|-1|\(^def\)|abcdef| 315### GA145(2) GNU regex implements GA145(1) 316##-1|-1|\(^a\)\1|aabc| 317##1|4|\(^a\)\1|^a^abc| 318##-1|-1|\(^^a\)|^a| 319##1|2|\(^^\)|^^| 320# GA146 3213|3|a$|cba| 322-1|-1|a$|abc| 3235|7|[a-z]*$|99ZZxyz| 324#W the expected result for [a-z]*$ is failure which isn't correct 32510|9|[a-z]*$|99ZZxyz99| 3263|3|$$|ab$| 327-1|-1|$$|$ab| 3283|3|\$$|ab$| 329# GA147(1) 330-1|-1|\(a$\)\1|bcaa| 331-1|-1|\(a$\)\1|ba$| 332-1|-1|\(ab$\)|ab$| 3331|2|\(ab$\)|ab| 3344|6|\(def$\)|abcdef| 335-1|-1|\(abc$\)|abcdef| 336### GA147(2) GNU regex implements GA147(1) 337##-1|-1|\(a$\)\1|bcaa| 338##2|5|\(a$\)\1|ba$a$| 339##-1|-1|\(ab$\)|ab| 340##1|3|\(ab$\)|ab$| 341# GA148 3420|0|^$|| 3431|3|^abc$|abc| 344-1|-1|^xyz$|^xyz^| 345-1|-1|^234$|^234$| 3461|9|^[a-zA-Z0-9]*$|2aA3bB9zZ| 347-1|-1|^[a-z0-9]*$|2aA3b#B9zZ| 348