1*5e7646d2SAndroid Build Coastguard Worker# regular expression test set 2*5e7646d2SAndroid Build Coastguard Worker# Lines are at least three fields, separated by one or more tabs. "" stands 3*5e7646d2SAndroid Build Coastguard Worker# for an empty field. First field is an RE. Second field is flags. If 4*5e7646d2SAndroid Build Coastguard Worker# C flag given, regcomp() is expected to fail, and the third field is the 5*5e7646d2SAndroid Build Coastguard Worker# error name (minus the leading REG_). 6*5e7646d2SAndroid Build Coastguard Worker# 7*5e7646d2SAndroid Build Coastguard Worker# Otherwise it is expected to succeed, and the third field is the string to 8*5e7646d2SAndroid Build Coastguard Worker# try matching it against. If there is no fourth field, the match is 9*5e7646d2SAndroid Build Coastguard Worker# expected to fail. If there is a fourth field, it is the substring that 10*5e7646d2SAndroid Build Coastguard Worker# the RE is expected to match. If there is a fifth field, it is a comma- 11*5e7646d2SAndroid Build Coastguard Worker# separated list of what the subexpressions should match, with - indicating 12*5e7646d2SAndroid Build Coastguard Worker# no match for that one. In both the fourth and fifth fields, a (sub)field 13*5e7646d2SAndroid Build Coastguard Worker# starting with @ indicates that the (sub)expression is expected to match 14*5e7646d2SAndroid Build Coastguard Worker# a null string followed by the stuff after the @; this provides a way to 15*5e7646d2SAndroid Build Coastguard Worker# test where null strings match. The character `N' in REs and strings 16*5e7646d2SAndroid Build Coastguard Worker# is newline, `S' is space, `T' is tab, `Z' is NUL. 17*5e7646d2SAndroid Build Coastguard Worker# 18*5e7646d2SAndroid Build Coastguard Worker# The full list of flags: 19*5e7646d2SAndroid Build Coastguard Worker# - placeholder, does nothing 20*5e7646d2SAndroid Build Coastguard Worker# b RE is a BRE, not an ERE 21*5e7646d2SAndroid Build Coastguard Worker# & try it as both an ERE and a BRE 22*5e7646d2SAndroid Build Coastguard Worker# C regcomp() error expected, third field is error name 23*5e7646d2SAndroid Build Coastguard Worker# i REG_ICASE 24*5e7646d2SAndroid Build Coastguard Worker# m ("mundane") REG_NOSPEC 25*5e7646d2SAndroid Build Coastguard Worker# s REG_NOSUB (not really testable) 26*5e7646d2SAndroid Build Coastguard Worker# n REG_NEWLINE 27*5e7646d2SAndroid Build Coastguard Worker# ^ REG_NOTBOL 28*5e7646d2SAndroid Build Coastguard Worker# $ REG_NOTEOL 29*5e7646d2SAndroid Build Coastguard Worker# # REG_STARTEND (see below) 30*5e7646d2SAndroid Build Coastguard Worker# p REG_PEND 31*5e7646d2SAndroid Build Coastguard Worker# 32*5e7646d2SAndroid Build Coastguard Worker# For REG_STARTEND, the start/end offsets are those of the substring 33*5e7646d2SAndroid Build Coastguard Worker# enclosed in (). 34*5e7646d2SAndroid Build Coastguard Worker 35*5e7646d2SAndroid Build Coastguard Worker# basics 36*5e7646d2SAndroid Build Coastguard Workera & a a 37*5e7646d2SAndroid Build Coastguard Workerabc & abc abc 38*5e7646d2SAndroid Build Coastguard Workerabc|de - abc abc 39*5e7646d2SAndroid Build Coastguard Workera|b|c - abc a 40*5e7646d2SAndroid Build Coastguard Worker 41*5e7646d2SAndroid Build Coastguard Worker# parentheses and perversions thereof 42*5e7646d2SAndroid Build Coastguard Workera(b)c - abc abc 43*5e7646d2SAndroid Build Coastguard Workera\(b\)c b abc abc 44*5e7646d2SAndroid Build Coastguard Workera( C EPAREN 45*5e7646d2SAndroid Build Coastguard Workera( b a( a( 46*5e7646d2SAndroid Build Coastguard Workera\( - a( a( 47*5e7646d2SAndroid Build Coastguard Workera\( bC EPAREN 48*5e7646d2SAndroid Build Coastguard Workera\(b bC EPAREN 49*5e7646d2SAndroid Build Coastguard Workera(b C EPAREN 50*5e7646d2SAndroid Build Coastguard Workera(b b a(b a(b 51*5e7646d2SAndroid Build Coastguard Worker# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) 52*5e7646d2SAndroid Build Coastguard Workera) - a) a) 53*5e7646d2SAndroid Build Coastguard Worker) - ) ) 54*5e7646d2SAndroid Build Coastguard Worker# end gagging (in a just world, those *should* give EPAREN) 55*5e7646d2SAndroid Build Coastguard Workera) b a) a) 56*5e7646d2SAndroid Build Coastguard Workera\) bC EPAREN 57*5e7646d2SAndroid Build Coastguard Worker\) bC EPAREN 58*5e7646d2SAndroid Build Coastguard Workera()b - ab ab 59*5e7646d2SAndroid Build Coastguard Workera\(\)b b ab ab 60*5e7646d2SAndroid Build Coastguard Worker 61*5e7646d2SAndroid Build Coastguard Worker# anchoring and REG_NEWLINE 62*5e7646d2SAndroid Build Coastguard Worker^abc$ & abc abc 63*5e7646d2SAndroid Build Coastguard Workera^b - a^b 64*5e7646d2SAndroid Build Coastguard Workera^b b a^b a^b 65*5e7646d2SAndroid Build Coastguard Workera$b - a$b 66*5e7646d2SAndroid Build Coastguard Workera$b b a$b a$b 67*5e7646d2SAndroid Build Coastguard Worker^ & abc @abc 68*5e7646d2SAndroid Build Coastguard Worker$ & abc @ 69*5e7646d2SAndroid Build Coastguard Worker^$ & "" @ 70*5e7646d2SAndroid Build Coastguard Worker$^ - "" @ 71*5e7646d2SAndroid Build Coastguard Worker\($\)\(^\) b "" @ 72*5e7646d2SAndroid Build Coastguard Worker# stop retching, those are legitimate (although disgusting) 73*5e7646d2SAndroid Build Coastguard Worker^^ - "" @ 74*5e7646d2SAndroid Build Coastguard Worker$$ - "" @ 75*5e7646d2SAndroid Build Coastguard Workerb$ & abNc 76*5e7646d2SAndroid Build Coastguard Workerb$ &n abNc b 77*5e7646d2SAndroid Build Coastguard Worker^b$ & aNbNc 78*5e7646d2SAndroid Build Coastguard Worker^b$ &n aNbNc b 79*5e7646d2SAndroid Build Coastguard Worker^$ &n aNNb @Nb 80*5e7646d2SAndroid Build Coastguard Worker^$ n abc 81*5e7646d2SAndroid Build Coastguard Worker^$ n abcN @ 82*5e7646d2SAndroid Build Coastguard Worker$^ n aNNb @Nb 83*5e7646d2SAndroid Build Coastguard Worker\($\)\(^\) bn aNNb @Nb 84*5e7646d2SAndroid Build Coastguard Worker^^ n^ aNNb @Nb 85*5e7646d2SAndroid Build Coastguard Worker$$ n aNNb @NN 86*5e7646d2SAndroid Build Coastguard Worker^a ^ a 87*5e7646d2SAndroid Build Coastguard Workera$ $ a 88*5e7646d2SAndroid Build Coastguard Worker^a ^n aNb 89*5e7646d2SAndroid Build Coastguard Worker^b ^n aNb b 90*5e7646d2SAndroid Build Coastguard Workera$ $n bNa 91*5e7646d2SAndroid Build Coastguard Workerb$ $n bNa b 92*5e7646d2SAndroid Build Coastguard Workera*(^b$)c* - b b 93*5e7646d2SAndroid Build Coastguard Workera*\(^b$\)c* b b b 94*5e7646d2SAndroid Build Coastguard Worker 95*5e7646d2SAndroid Build Coastguard Worker# certain syntax errors and non-errors 96*5e7646d2SAndroid Build Coastguard Worker| C EMPTY 97*5e7646d2SAndroid Build Coastguard Worker| b | | 98*5e7646d2SAndroid Build Coastguard Worker* C BADRPT 99*5e7646d2SAndroid Build Coastguard Worker* b * * 100*5e7646d2SAndroid Build Coastguard Worker+ C BADRPT 101*5e7646d2SAndroid Build Coastguard Worker? C BADRPT 102*5e7646d2SAndroid Build Coastguard Worker"" &C EMPTY 103*5e7646d2SAndroid Build Coastguard Worker() - abc @abc 104*5e7646d2SAndroid Build Coastguard Worker\(\) b abc @abc 105*5e7646d2SAndroid Build Coastguard Workera||b C EMPTY 106*5e7646d2SAndroid Build Coastguard Worker|ab C EMPTY 107*5e7646d2SAndroid Build Coastguard Workerab| C EMPTY 108*5e7646d2SAndroid Build Coastguard Worker(|a)b C EMPTY 109*5e7646d2SAndroid Build Coastguard Worker(a|)b C EMPTY 110*5e7646d2SAndroid Build Coastguard Worker(*a) C BADRPT 111*5e7646d2SAndroid Build Coastguard Worker(+a) C BADRPT 112*5e7646d2SAndroid Build Coastguard Worker(?a) C BADRPT 113*5e7646d2SAndroid Build Coastguard Worker({1}a) C BADRPT 114*5e7646d2SAndroid Build Coastguard Worker\(\{1\}a\) bC BADRPT 115*5e7646d2SAndroid Build Coastguard Worker(a|*b) C BADRPT 116*5e7646d2SAndroid Build Coastguard Worker(a|+b) C BADRPT 117*5e7646d2SAndroid Build Coastguard Worker(a|?b) C BADRPT 118*5e7646d2SAndroid Build Coastguard Worker(a|{1}b) C BADRPT 119*5e7646d2SAndroid Build Coastguard Worker^* C BADRPT 120*5e7646d2SAndroid Build Coastguard Worker^* b * * 121*5e7646d2SAndroid Build Coastguard Worker^+ C BADRPT 122*5e7646d2SAndroid Build Coastguard Worker^? C BADRPT 123*5e7646d2SAndroid Build Coastguard Worker^{1} C BADRPT 124*5e7646d2SAndroid Build Coastguard Worker^\{1\} bC BADRPT 125*5e7646d2SAndroid Build Coastguard Worker 126*5e7646d2SAndroid Build Coastguard Worker# metacharacters, backslashes 127*5e7646d2SAndroid Build Coastguard Workera.c & abc abc 128*5e7646d2SAndroid Build Coastguard Workera[bc]d & abd abd 129*5e7646d2SAndroid Build Coastguard Workera\*c & a*c a*c 130*5e7646d2SAndroid Build Coastguard Workera\\b & a\b a\b 131*5e7646d2SAndroid Build Coastguard Workera\\\*b & a\*b a\*b 132*5e7646d2SAndroid Build Coastguard Workera\bc & abc abc 133*5e7646d2SAndroid Build Coastguard Workera\ &C EESCAPE 134*5e7646d2SAndroid Build Coastguard Workera\\bc & a\bc a\bc 135*5e7646d2SAndroid Build Coastguard Worker\{ bC BADRPT 136*5e7646d2SAndroid Build Coastguard Workera\[b & a[b a[b 137*5e7646d2SAndroid Build Coastguard Workera[b &C EBRACK 138*5e7646d2SAndroid Build Coastguard Worker# trailing $ is a peculiar special case for the BRE code 139*5e7646d2SAndroid Build Coastguard Workera$ & a a 140*5e7646d2SAndroid Build Coastguard Workera$ & a$ 141*5e7646d2SAndroid Build Coastguard Workera\$ & a 142*5e7646d2SAndroid Build Coastguard Workera\$ & a$ a$ 143*5e7646d2SAndroid Build Coastguard Workera\\$ & a 144*5e7646d2SAndroid Build Coastguard Workera\\$ & a$ 145*5e7646d2SAndroid Build Coastguard Workera\\$ & a\$ 146*5e7646d2SAndroid Build Coastguard Workera\\$ & a\ a\ 147*5e7646d2SAndroid Build Coastguard Worker 148*5e7646d2SAndroid Build Coastguard Worker# back references, ugh 149*5e7646d2SAndroid Build Coastguard Workera\(b\)\2c bC ESUBREG 150*5e7646d2SAndroid Build Coastguard Workera\(b\1\)c bC ESUBREG 151*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d b abbcbbd abbcbbd bb 152*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d b abbcbd 153*5e7646d2SAndroid Build Coastguard Workera\(b*\)c\1d b abbcbbbd 154*5e7646d2SAndroid Build Coastguard Worker^\(.\)\1 b abc 155*5e7646d2SAndroid Build Coastguard Workera\([bc]\)\1d b abcdabbd abbd b 156*5e7646d2SAndroid Build Coastguard Workera\(\([bc]\)\2\)*d b abbccd abbccd 157*5e7646d2SAndroid Build Coastguard Workera\(\([bc]\)\2\)*d b abbcbd 158*5e7646d2SAndroid Build Coastguard Worker# actually, this next one probably ought to fail, but the spec is unclear 159*5e7646d2SAndroid Build Coastguard Workera\(\(b\)*\2\)*d b abbbd abbbd 160*5e7646d2SAndroid Build Coastguard Worker# here is a case that no NFA implementation does right 161*5e7646d2SAndroid Build Coastguard Worker\(ab*\)[ab]*\1 b ababaaa ababaaa a 162*5e7646d2SAndroid Build Coastguard Worker# check out normal matching in the presence of back refs 163*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bcd b aabcd aabcd 164*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d b aabcd aabcd 165*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d b aabd aabd 166*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*d b aabcccd aabcccd 167*5e7646d2SAndroid Build Coastguard Worker\(a\)\1bc*[ce]d b aabcccd aabcccd 168*5e7646d2SAndroid Build Coastguard Worker^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd 169*5e7646d2SAndroid Build Coastguard Worker 170*5e7646d2SAndroid Build Coastguard Worker# ordinary repetitions 171*5e7646d2SAndroid Build Coastguard Workerab*c & abc abc 172*5e7646d2SAndroid Build Coastguard Workerab+c - abc abc 173*5e7646d2SAndroid Build Coastguard Workerab?c - abc abc 174*5e7646d2SAndroid Build Coastguard Workera\(*\)b b a*b a*b 175*5e7646d2SAndroid Build Coastguard Workera\(**\)b b ab ab 176*5e7646d2SAndroid Build Coastguard Workera\(***\)b bC BADRPT 177*5e7646d2SAndroid Build Coastguard Worker*a b *a *a 178*5e7646d2SAndroid Build Coastguard Worker**a b a a 179*5e7646d2SAndroid Build Coastguard Worker***a bC BADRPT 180*5e7646d2SAndroid Build Coastguard Worker 181*5e7646d2SAndroid Build Coastguard Worker# the dreaded bounded repetitions 182*5e7646d2SAndroid Build Coastguard Worker{ & { { 183*5e7646d2SAndroid Build Coastguard Worker{abc & {abc {abc 184*5e7646d2SAndroid Build Coastguard Worker{1 C BADRPT 185*5e7646d2SAndroid Build Coastguard Worker{1} C BADRPT 186*5e7646d2SAndroid Build Coastguard Workera{b & a{b a{b 187*5e7646d2SAndroid Build Coastguard Workera{1}b - ab ab 188*5e7646d2SAndroid Build Coastguard Workera\{1\}b b ab ab 189*5e7646d2SAndroid Build Coastguard Workera{1,}b - ab ab 190*5e7646d2SAndroid Build Coastguard Workera\{1,\}b b ab ab 191*5e7646d2SAndroid Build Coastguard Workera{1,2}b - aab aab 192*5e7646d2SAndroid Build Coastguard Workera\{1,2\}b b aab aab 193*5e7646d2SAndroid Build Coastguard Workera{1 C EBRACE 194*5e7646d2SAndroid Build Coastguard Workera\{1 bC EBRACE 195*5e7646d2SAndroid Build Coastguard Workera{1a C EBRACE 196*5e7646d2SAndroid Build Coastguard Workera\{1a bC EBRACE 197*5e7646d2SAndroid Build Coastguard Workera{1a} C BADBR 198*5e7646d2SAndroid Build Coastguard Workera\{1a\} bC BADBR 199*5e7646d2SAndroid Build Coastguard Workera{,2} - a{,2} a{,2} 200*5e7646d2SAndroid Build Coastguard Workera\{,2\} bC BADBR 201*5e7646d2SAndroid Build Coastguard Workera{,} - a{,} a{,} 202*5e7646d2SAndroid Build Coastguard Workera\{,\} bC BADBR 203*5e7646d2SAndroid Build Coastguard Workera{1,x} C BADBR 204*5e7646d2SAndroid Build Coastguard Workera\{1,x\} bC BADBR 205*5e7646d2SAndroid Build Coastguard Workera{1,x C EBRACE 206*5e7646d2SAndroid Build Coastguard Workera\{1,x bC EBRACE 207*5e7646d2SAndroid Build Coastguard Workera{300} C BADBR 208*5e7646d2SAndroid Build Coastguard Workera\{300\} bC BADBR 209*5e7646d2SAndroid Build Coastguard Workera{1,0} C BADBR 210*5e7646d2SAndroid Build Coastguard Workera\{1,0\} bC BADBR 211*5e7646d2SAndroid Build Coastguard Workerab{0,0}c - abcac ac 212*5e7646d2SAndroid Build Coastguard Workerab\{0,0\}c b abcac ac 213*5e7646d2SAndroid Build Coastguard Workerab{0,1}c - abcac abc 214*5e7646d2SAndroid Build Coastguard Workerab\{0,1\}c b abcac abc 215*5e7646d2SAndroid Build Coastguard Workerab{0,3}c - abbcac abbc 216*5e7646d2SAndroid Build Coastguard Workerab\{0,3\}c b abbcac abbc 217*5e7646d2SAndroid Build Coastguard Workerab{1,1}c - acabc abc 218*5e7646d2SAndroid Build Coastguard Workerab\{1,1\}c b acabc abc 219*5e7646d2SAndroid Build Coastguard Workerab{1,3}c - acabc abc 220*5e7646d2SAndroid Build Coastguard Workerab\{1,3\}c b acabc abc 221*5e7646d2SAndroid Build Coastguard Workerab{2,2}c - abcabbc abbc 222*5e7646d2SAndroid Build Coastguard Workerab\{2,2\}c b abcabbc abbc 223*5e7646d2SAndroid Build Coastguard Workerab{2,4}c - abcabbc abbc 224*5e7646d2SAndroid Build Coastguard Workerab\{2,4\}c b abcabbc abbc 225*5e7646d2SAndroid Build Coastguard Worker((a{1,10}){1,10}){1,10} - a a a,a 226*5e7646d2SAndroid Build Coastguard Worker 227*5e7646d2SAndroid Build Coastguard Worker# multiple repetitions 228*5e7646d2SAndroid Build Coastguard Workera** &C BADRPT 229*5e7646d2SAndroid Build Coastguard Workera++ C BADRPT 230*5e7646d2SAndroid Build Coastguard Workera?? C BADRPT 231*5e7646d2SAndroid Build Coastguard Workera*+ C BADRPT 232*5e7646d2SAndroid Build Coastguard Workera*? C BADRPT 233*5e7646d2SAndroid Build Coastguard Workera+* C BADRPT 234*5e7646d2SAndroid Build Coastguard Workera+? C BADRPT 235*5e7646d2SAndroid Build Coastguard Workera?* C BADRPT 236*5e7646d2SAndroid Build Coastguard Workera?+ C BADRPT 237*5e7646d2SAndroid Build Coastguard Workera{1}{1} C BADRPT 238*5e7646d2SAndroid Build Coastguard Workera*{1} C BADRPT 239*5e7646d2SAndroid Build Coastguard Workera+{1} C BADRPT 240*5e7646d2SAndroid Build Coastguard Workera?{1} C BADRPT 241*5e7646d2SAndroid Build Coastguard Workera{1}* C BADRPT 242*5e7646d2SAndroid Build Coastguard Workera{1}+ C BADRPT 243*5e7646d2SAndroid Build Coastguard Workera{1}? C BADRPT 244*5e7646d2SAndroid Build Coastguard Workera*{b} - a{b} a{b} 245*5e7646d2SAndroid Build Coastguard Workera\{1\}\{1\} bC BADRPT 246*5e7646d2SAndroid Build Coastguard Workera*\{1\} bC BADRPT 247*5e7646d2SAndroid Build Coastguard Workera\{1\}* bC BADRPT 248*5e7646d2SAndroid Build Coastguard Worker 249*5e7646d2SAndroid Build Coastguard Worker# brackets, and numerous perversions thereof 250*5e7646d2SAndroid Build Coastguard Workera[b]c & abc abc 251*5e7646d2SAndroid Build Coastguard Workera[ab]c & abc abc 252*5e7646d2SAndroid Build Coastguard Workera[^ab]c & adc adc 253*5e7646d2SAndroid Build Coastguard Workera[]b]c & a]c a]c 254*5e7646d2SAndroid Build Coastguard Workera[[b]c & a[c a[c 255*5e7646d2SAndroid Build Coastguard Workera[-b]c & a-c a-c 256*5e7646d2SAndroid Build Coastguard Workera[^]b]c & adc adc 257*5e7646d2SAndroid Build Coastguard Workera[^-b]c & adc adc 258*5e7646d2SAndroid Build Coastguard Workera[b-]c & a-c a-c 259*5e7646d2SAndroid Build Coastguard Workera[b &C EBRACK 260*5e7646d2SAndroid Build Coastguard Workera[] &C EBRACK 261*5e7646d2SAndroid Build Coastguard Workera[1-3]c & a2c a2c 262*5e7646d2SAndroid Build Coastguard Workera[3-1]c &C ERANGE 263*5e7646d2SAndroid Build Coastguard Workera[1-3-5]c &C ERANGE 264*5e7646d2SAndroid Build Coastguard Workera[[.-.]--]c & a-c a-c 265*5e7646d2SAndroid Build Coastguard Workera[1- &C ERANGE 266*5e7646d2SAndroid Build Coastguard Workera[[. &C EBRACK 267*5e7646d2SAndroid Build Coastguard Workera[[.x &C EBRACK 268*5e7646d2SAndroid Build Coastguard Workera[[.x. &C EBRACK 269*5e7646d2SAndroid Build Coastguard Workera[[.x.] &C EBRACK 270*5e7646d2SAndroid Build Coastguard Workera[[.x.]] & ax ax 271*5e7646d2SAndroid Build Coastguard Workera[[.x,.]] &C ECOLLATE 272*5e7646d2SAndroid Build Coastguard Workera[[.one.]]b & a1b a1b 273*5e7646d2SAndroid Build Coastguard Workera[[.notdef.]]b &C ECOLLATE 274*5e7646d2SAndroid Build Coastguard Workera[[.].]]b & a]b a]b 275*5e7646d2SAndroid Build Coastguard Workera[[:alpha:]]c & abc abc 276*5e7646d2SAndroid Build Coastguard Workera[[:notdef:]]c &C ECTYPE 277*5e7646d2SAndroid Build Coastguard Workera[[: &C EBRACK 278*5e7646d2SAndroid Build Coastguard Workera[[:alpha &C EBRACK 279*5e7646d2SAndroid Build Coastguard Workera[[:alpha:] &C EBRACK 280*5e7646d2SAndroid Build Coastguard Workera[[:alpha,:] &C ECTYPE 281*5e7646d2SAndroid Build Coastguard Workera[[:]:]]b &C ECTYPE 282*5e7646d2SAndroid Build Coastguard Workera[[:-:]]b &C ECTYPE 283*5e7646d2SAndroid Build Coastguard Workera[[:alph:]] &C ECTYPE 284*5e7646d2SAndroid Build Coastguard Workera[[:alphabet:]] &C ECTYPE 285*5e7646d2SAndroid Build Coastguard Worker[[:alnum:]]+ - -%@a0X- a0X 286*5e7646d2SAndroid Build Coastguard Worker[[:alpha:]]+ - -%@aX0- aX 287*5e7646d2SAndroid Build Coastguard Worker[[:blank:]]+ - aSSTb SST 288*5e7646d2SAndroid Build Coastguard Worker[[:cntrl:]]+ - aNTb NT 289*5e7646d2SAndroid Build Coastguard Worker[[:digit:]]+ - a019b 019 290*5e7646d2SAndroid Build Coastguard Worker[[:graph:]]+ - Sa%bS a%b 291*5e7646d2SAndroid Build Coastguard Worker[[:lower:]]+ - AabC ab 292*5e7646d2SAndroid Build Coastguard Worker[[:print:]]+ - NaSbN aSb 293*5e7646d2SAndroid Build Coastguard Worker[[:punct:]]+ - S%-&T %-& 294*5e7646d2SAndroid Build Coastguard Worker[[:space:]]+ - aSNTb SNT 295*5e7646d2SAndroid Build Coastguard Worker[[:upper:]]+ - aBCd BC 296*5e7646d2SAndroid Build Coastguard Worker[[:xdigit:]]+ - p0f3Cq 0f3C 297*5e7646d2SAndroid Build Coastguard Workera[[=b=]]c & abc abc 298*5e7646d2SAndroid Build Coastguard Workera[[= &C EBRACK 299*5e7646d2SAndroid Build Coastguard Workera[[=b &C EBRACK 300*5e7646d2SAndroid Build Coastguard Workera[[=b= &C EBRACK 301*5e7646d2SAndroid Build Coastguard Workera[[=b=] &C EBRACK 302*5e7646d2SAndroid Build Coastguard Workera[[=b,=]] &C ECOLLATE 303*5e7646d2SAndroid Build Coastguard Workera[[=one=]]b & a1b a1b 304*5e7646d2SAndroid Build Coastguard Worker 305*5e7646d2SAndroid Build Coastguard Worker# complexities 306*5e7646d2SAndroid Build Coastguard Workera(((b)))c - abc abc 307*5e7646d2SAndroid Build Coastguard Workera(b|(c))d - abd abd 308*5e7646d2SAndroid Build Coastguard Workera(b*|c)d - abbd abbd 309*5e7646d2SAndroid Build Coastguard Worker# just gotta have one DFA-buster, of course 310*5e7646d2SAndroid Build Coastguard Workera[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 311*5e7646d2SAndroid Build Coastguard Worker# and an inline expansion in case somebody gets tricky 312*5e7646d2SAndroid Build Coastguard Workera[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 313*5e7646d2SAndroid Build Coastguard Worker# and in case somebody just slips in an NFA... 314*5e7646d2SAndroid Build Coastguard Workera[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) - aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights 315*5e7646d2SAndroid Build Coastguard Worker# fish for anomalies as the number of states passes 32 316*5e7646d2SAndroid Build Coastguard Worker12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 317*5e7646d2SAndroid Build Coastguard Worker123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 318*5e7646d2SAndroid Build Coastguard Worker1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 319*5e7646d2SAndroid Build Coastguard Worker12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 320*5e7646d2SAndroid Build Coastguard Worker123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 321*5e7646d2SAndroid Build Coastguard Worker# and one really big one, beyond any plausible word width 322*5e7646d2SAndroid Build Coastguard Worker1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 323*5e7646d2SAndroid Build Coastguard Worker# fish for problems as brackets go past 8 324*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm 325*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo 326*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq 327*5e7646d2SAndroid Build Coastguard Worker[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq 328*5e7646d2SAndroid Build Coastguard Worker 329*5e7646d2SAndroid Build Coastguard Worker# subtleties of matching 330*5e7646d2SAndroid Build Coastguard Workerabc & xabcy abc 331*5e7646d2SAndroid Build Coastguard Workera\(b\)?c\1d b acd 332*5e7646d2SAndroid Build Coastguard WorkeraBc i Abc Abc 333*5e7646d2SAndroid Build Coastguard Workera[Bc]*d i abBCcd abBCcd 334*5e7646d2SAndroid Build Coastguard Worker0[[:upper:]]1 &i 0a1 0a1 335*5e7646d2SAndroid Build Coastguard Worker0[[:lower:]]1 &i 0A1 0A1 336*5e7646d2SAndroid Build Coastguard Workera[^b]c &i abc 337*5e7646d2SAndroid Build Coastguard Workera[^b]c &i aBc 338*5e7646d2SAndroid Build Coastguard Workera[^b]c &i adc adc 339*5e7646d2SAndroid Build Coastguard Worker[a]b[c] - abc abc 340*5e7646d2SAndroid Build Coastguard Worker[a]b[a] - aba aba 341*5e7646d2SAndroid Build Coastguard Worker[abc]b[abc] - abc abc 342*5e7646d2SAndroid Build Coastguard Worker[abc]b[abd] - abd abd 343*5e7646d2SAndroid Build Coastguard Workera(b?c)+d - accd accd 344*5e7646d2SAndroid Build Coastguard Worker(wee|week)(knights|night) - weeknights weeknights 345*5e7646d2SAndroid Build Coastguard Worker(we|wee|week|frob)(knights|night|day) - weeknights weeknights 346*5e7646d2SAndroid Build Coastguard Workera[bc]d - xyzaaabcaababdacd abd 347*5e7646d2SAndroid Build Coastguard Workera[ab]c - aaabc abc 348*5e7646d2SAndroid Build Coastguard Workerabc s abc abc 349*5e7646d2SAndroid Build Coastguard Workera* & b @b 350*5e7646d2SAndroid Build Coastguard Worker 351*5e7646d2SAndroid Build Coastguard Worker# Let's have some fun -- try to match a C comment. 352*5e7646d2SAndroid Build Coastguard Worker# first the obvious, which looks okay at first glance... 353*5e7646d2SAndroid Build Coastguard Worker/\*.*\*/ - /*x*/ /*x*/ 354*5e7646d2SAndroid Build Coastguard Worker# but... 355*5e7646d2SAndroid Build Coastguard Worker/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/ 356*5e7646d2SAndroid Build Coastguard Worker# okay, we must not match */ inside; try to do that... 357*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/ 358*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/ 359*5e7646d2SAndroid Build Coastguard Worker# but... 360*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/ 361*5e7646d2SAndroid Build Coastguard Worker# and a still fancier version, which does it right (I think)... 362*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/ 363*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/ 364*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/ 365*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/ 366*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/ 367*5e7646d2SAndroid Build Coastguard Worker/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/ 368*5e7646d2SAndroid Build Coastguard Worker 369*5e7646d2SAndroid Build Coastguard Worker# subexpressions 370*5e7646d2SAndroid Build Coastguard Worker.* - abc abc - 371*5e7646d2SAndroid Build Coastguard Workera(b)(c)d - abcd abcd b,c 372*5e7646d2SAndroid Build Coastguard Workera(((b)))c - abc abc b,b,b 373*5e7646d2SAndroid Build Coastguard Workera(b|(c))d - abd abd b,- 374*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d - abbd abbd bb 375*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d - acd acd c 376*5e7646d2SAndroid Build Coastguard Workera(b*|c|e)d - ad ad @d 377*5e7646d2SAndroid Build Coastguard Workera(b?)c - abc abc b 378*5e7646d2SAndroid Build Coastguard Workera(b?)c - ac ac @c 379*5e7646d2SAndroid Build Coastguard Workera(b+)c - abc abc b 380*5e7646d2SAndroid Build Coastguard Workera(b+)c - abbbc abbbc bbb 381*5e7646d2SAndroid Build Coastguard Workera(b*)c - ac ac @c 382*5e7646d2SAndroid Build Coastguard Worker(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de 383*5e7646d2SAndroid Build Coastguard Worker# the regression tester only asks for 9 subexpressions 384*5e7646d2SAndroid Build Coastguard Workera(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j 385*5e7646d2SAndroid Build Coastguard Workera(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k 386*5e7646d2SAndroid Build Coastguard Workera([bc]?)c - abc abc b 387*5e7646d2SAndroid Build Coastguard Workera([bc]?)c - ac ac @c 388*5e7646d2SAndroid Build Coastguard Workera([bc]+)c - abc abc b 389*5e7646d2SAndroid Build Coastguard Workera([bc]+)c - abcc abcc bc 390*5e7646d2SAndroid Build Coastguard Workera([bc]+)bc - abcbc abcbc bc 391*5e7646d2SAndroid Build Coastguard Workera(bb+|b)b - abb abb b 392*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)b - abb abb b 393*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)b - abbb abbb bb 394*5e7646d2SAndroid Build Coastguard Workera(bbb+|bb+|b)bb - abbb abbb b 395*5e7646d2SAndroid Build Coastguard Worker(.*).* - abcdef abcdef abcdef 396*5e7646d2SAndroid Build Coastguard Worker(a*)* - bc @b @b 397*5e7646d2SAndroid Build Coastguard Worker 398*5e7646d2SAndroid Build Coastguard Worker# do we get the right subexpression when it is used more than once? 399*5e7646d2SAndroid Build Coastguard Workera(b|c)*d - ad ad - 400*5e7646d2SAndroid Build Coastguard Workera(b|c)*d - abcd abcd c 401*5e7646d2SAndroid Build Coastguard Workera(b|c)+d - abd abd b 402*5e7646d2SAndroid Build Coastguard Workera(b|c)+d - abcd abcd c 403*5e7646d2SAndroid Build Coastguard Workera(b|c?)+d - ad ad @d 404*5e7646d2SAndroid Build Coastguard Workera(b|c?)+d - abcd abcd @d 405*5e7646d2SAndroid Build Coastguard Workera(b|c){0,0}d - ad ad - 406*5e7646d2SAndroid Build Coastguard Workera(b|c){0,1}d - ad ad - 407*5e7646d2SAndroid Build Coastguard Workera(b|c){0,1}d - abd abd b 408*5e7646d2SAndroid Build Coastguard Workera(b|c){0,2}d - ad ad - 409*5e7646d2SAndroid Build Coastguard Workera(b|c){0,2}d - abcd abcd c 410*5e7646d2SAndroid Build Coastguard Workera(b|c){0,}d - ad ad - 411*5e7646d2SAndroid Build Coastguard Workera(b|c){0,}d - abcd abcd c 412*5e7646d2SAndroid Build Coastguard Workera(b|c){1,1}d - abd abd b 413*5e7646d2SAndroid Build Coastguard Workera(b|c){1,1}d - acd acd c 414*5e7646d2SAndroid Build Coastguard Workera(b|c){1,2}d - abd abd b 415*5e7646d2SAndroid Build Coastguard Workera(b|c){1,2}d - abcd abcd c 416*5e7646d2SAndroid Build Coastguard Workera(b|c){1,}d - abd abd b 417*5e7646d2SAndroid Build Coastguard Workera(b|c){1,}d - abcd abcd c 418*5e7646d2SAndroid Build Coastguard Workera(b|c){2,2}d - acbd acbd b 419*5e7646d2SAndroid Build Coastguard Workera(b|c){2,2}d - abcd abcd c 420*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d - abcd abcd c 421*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d - abcbd abcbd b 422*5e7646d2SAndroid Build Coastguard Workera(b|c){2,4}d - abcbcd abcbcd c 423*5e7646d2SAndroid Build Coastguard Workera(b|c){2,}d - abcd abcd c 424*5e7646d2SAndroid Build Coastguard Workera(b|c){2,}d - abcbd abcbd b 425*5e7646d2SAndroid Build Coastguard Workera(b+|((c)*))+d - abd abd @d,@d,- 426*5e7646d2SAndroid Build Coastguard Workera(b+|((c)*))+d - abcd abcd @d,@d,- 427*5e7646d2SAndroid Build Coastguard Worker 428*5e7646d2SAndroid Build Coastguard Worker# check out the STARTEND option 429*5e7646d2SAndroid Build Coastguard Worker[abc] &# a(b)c b 430*5e7646d2SAndroid Build Coastguard Worker[abc] &# a(d)c 431*5e7646d2SAndroid Build Coastguard Worker[abc] &# a(bc)d b 432*5e7646d2SAndroid Build Coastguard Worker[abc] &# a(dc)d c 433*5e7646d2SAndroid Build Coastguard Worker. &# a()c 434*5e7646d2SAndroid Build Coastguard Workerb.*c &# b(bc)c bc 435*5e7646d2SAndroid Build Coastguard Workerb.* &# b(bc)c bc 436*5e7646d2SAndroid Build Coastguard Worker.*c &# b(bc)c bc 437*5e7646d2SAndroid Build Coastguard Worker 438*5e7646d2SAndroid Build Coastguard Worker# plain strings, with the NOSPEC flag 439*5e7646d2SAndroid Build Coastguard Workerabc m abc abc 440*5e7646d2SAndroid Build Coastguard Workerabc m xabcy abc 441*5e7646d2SAndroid Build Coastguard Workerabc m xyz 442*5e7646d2SAndroid Build Coastguard Workera*b m aba*b a*b 443*5e7646d2SAndroid Build Coastguard Workera*b m ab 444*5e7646d2SAndroid Build Coastguard Worker"" mC EMPTY 445*5e7646d2SAndroid Build Coastguard Worker 446*5e7646d2SAndroid Build Coastguard Worker# cases involving NULs 447*5e7646d2SAndroid Build Coastguard WorkeraZb & a a 448*5e7646d2SAndroid Build Coastguard WorkeraZb &p a 449*5e7646d2SAndroid Build Coastguard WorkeraZb &p# (aZb) aZb 450*5e7646d2SAndroid Build Coastguard WorkeraZ*b &p# (ab) ab 451*5e7646d2SAndroid Build Coastguard Workera.b &# (aZb) aZb 452*5e7646d2SAndroid Build Coastguard Workera.* &# (aZb)c aZb 453*5e7646d2SAndroid Build Coastguard Worker 454*5e7646d2SAndroid Build Coastguard Worker# word boundaries (ick) 455*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a & a a 456*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a & ba 457*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a & -a a 458*5e7646d2SAndroid Build Coastguard Workera[[:>:]] & a a 459*5e7646d2SAndroid Build Coastguard Workera[[:>:]] & ab 460*5e7646d2SAndroid Build Coastguard Workera[[:>:]] & a- a 461*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc 462*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc 463*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc 464*5e7646d2SAndroid Build Coastguard Worker[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc 465*5e7646d2SAndroid Build Coastguard Worker[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_ 466*5e7646d2SAndroid Build Coastguard Worker[[:<:]]a_b[[:>:]] & x_a_b 467*5e7646d2SAndroid Build Coastguard Worker 468*5e7646d2SAndroid Build Coastguard Worker# past problems, and suspected problems 469*5e7646d2SAndroid Build Coastguard Worker(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 470*5e7646d2SAndroid Build Coastguard Workerabcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop 471*5e7646d2SAndroid Build Coastguard Workerabcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv 472*5e7646d2SAndroid Build Coastguard Worker(ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN]) - CC11 CC11 473*5e7646d2SAndroid Build Coastguard WorkerCC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 474*5e7646d2SAndroid Build Coastguard WorkerChar \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz 475*5e7646d2SAndroid Build Coastguard Workera?b - ab ab 476*5e7646d2SAndroid Build Coastguard Worker-\{0,1\}[0-9]*$ b -5 -5 477*5e7646d2SAndroid Build Coastguard Workera*a*a*a*a*a*a* & aaaaaa aaaaaa 478