1*8d4875efSotto# $OpenBSD: tests,v 1.10 2021/04/02 14:20:57 otto Exp $ 2df930be7Sderaadt# $NetBSD: tests,v 1.5 1995/04/20 22:40:00 cgd Exp $ 3df930be7Sderaadt 4df930be7Sderaadt# regular expression test set 5df930be7Sderaadt# Lines are at least three fields, separated by one or more tabs. "" stands 6df930be7Sderaadt# for an empty field. First field is an RE. Second field is flags. If 7df930be7Sderaadt# C flag given, regcomp() is expected to fail, and the third field is the 8df930be7Sderaadt# error name (minus the leading REG_). 9df930be7Sderaadt# 10df930be7Sderaadt# Otherwise it is expected to succeed, and the third field is the string to 11df930be7Sderaadt# try matching it against. If there is no fourth field, the match is 12df930be7Sderaadt# expected to fail. If there is a fourth field, it is the substring that 13df930be7Sderaadt# the RE is expected to match. If there is a fifth field, it is a comma- 14df930be7Sderaadt# separated list of what the subexpressions should match, with - indicating 15df930be7Sderaadt# no match for that one. In both the fourth and fifth fields, a (sub)field 16df930be7Sderaadt# starting with @ indicates that the (sub)expression is expected to match 17df930be7Sderaadt# a null string followed by the stuff after the @; this provides a way to 18df930be7Sderaadt# test where null strings match. The character `N' in REs and strings 19df930be7Sderaadt# is newline, `S' is space, `T' is tab, `Z' is NUL. 20df930be7Sderaadt# 21df930be7Sderaadt# The full list of flags: 22df930be7Sderaadt# - placeholder, does nothing 23df930be7Sderaadt# b RE is a BRE, not an ERE 24df930be7Sderaadt# & try it as both an ERE and a BRE 25df930be7Sderaadt# C regcomp() error expected, third field is error name 26df930be7Sderaadt# i REG_ICASE 27df930be7Sderaadt# m ("mundane") REG_NOSPEC 28df930be7Sderaadt# s REG_NOSUB (not really testable) 29df930be7Sderaadt# n REG_NEWLINE 30df930be7Sderaadt# ^ REG_NOTBOL 31df930be7Sderaadt# $ REG_NOTEOL 32df930be7Sderaadt# # REG_STARTEND (see below) 33df930be7Sderaadt# p REG_PEND 34df930be7Sderaadt# 35df930be7Sderaadt# For REG_STARTEND, the start/end offsets are those of the substring 36df930be7Sderaadt# enclosed in (). 37df930be7Sderaadt 38df930be7Sderaadt# basics 39df930be7Sderaadta & a a 40df930be7Sderaadtabc & abc abc 41df930be7Sderaadtabc|de - abc abc 42df930be7Sderaadta|b|c - abc a 43df930be7Sderaadt 44df930be7Sderaadt# parentheses and perversions thereof 45df930be7Sderaadta(b)c - abc abc 46df930be7Sderaadta\(b\)c b abc abc 47df930be7Sderaadta( C EPAREN 48df930be7Sderaadta( b a( a( 49df930be7Sderaadta\( - a( a( 50df930be7Sderaadta\( bC EPAREN 51df930be7Sderaadta\(b bC EPAREN 52df930be7Sderaadta(b C EPAREN 53df930be7Sderaadta(b b a(b a(b 54df930be7Sderaadt# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) 55df930be7Sderaadta) - a) a) 56df930be7Sderaadt) - ) ) 57df930be7Sderaadt# end gagging (in a just world, those *should* give EPAREN) 58df930be7Sderaadta) b a) a) 59df930be7Sderaadta\) bC EPAREN 60df930be7Sderaadt\) bC EPAREN 61df930be7Sderaadta()b - ab ab 62df930be7Sderaadta\(\)b b ab ab 63df930be7Sderaadt 64df930be7Sderaadt# anchoring and REG_NEWLINE 65df930be7Sderaadt^abc$ & abc abc 6609cba3fbSschwarze^b & abc 67df930be7Sderaadta^b - a^b 68df930be7Sderaadta^b b a^b a^b 69df930be7Sderaadta$b - a$b 70df930be7Sderaadta$b b a$b a$b 71df930be7Sderaadt^ & abc @abc 72df930be7Sderaadt$ & abc @ 73df930be7Sderaadt^$ & "" @ 74df930be7Sderaadt$^ - "" @ 75df930be7Sderaadt\($\)\(^\) b "" @ 76df930be7Sderaadt# stop retching, those are legitimate (although disgusting) 77df930be7Sderaadt^^ - "" @ 78df930be7Sderaadt$$ - "" @ 79df930be7Sderaadtb$ & abNc 80df930be7Sderaadtb$ &n abNc b 8109cba3fbSschwarze^b & aNbNc 8209cba3fbSschwarzeb$ & aNbNc 8309cba3fbSschwarze^a &n aNb a 8409cba3fbSschwarze^b &n abc 85df930be7Sderaadt^b$ &n aNbNc b 86df930be7Sderaadt^$ &n aNNb @Nb 87df930be7Sderaadt^$ n abc 88df930be7Sderaadt^$ n abcN @ 89df930be7Sderaadt$^ n aNNb @Nb 90df930be7Sderaadt\($\)\(^\) bn aNNb @Nb 91df930be7Sderaadt^^ n^ aNNb @Nb 92df930be7Sderaadt$$ n aNNb @NN 9309cba3fbSschwarze^a &^ a 9409cba3fbSschwarzea$ &$ a 9509cba3fbSschwarze^b &^ abc 9609cba3fbSschwarze^b &^ aNb 9709cba3fbSschwarze^a &^n aNb 9809cba3fbSschwarze^b &^n abc 9909cba3fbSschwarze^b &^n aNb b 10009cba3fbSschwarzea$ &$n bNa 10109cba3fbSschwarzeb$ &$n bNa b 102df930be7Sderaadta*(^b$)c* - b b 103df930be7Sderaadta*\(^b$\)c* b b b 104df930be7Sderaadt 105df930be7Sderaadt# certain syntax errors and non-errors 106df930be7Sderaadt| C EMPTY 107df930be7Sderaadt| b | | 108df930be7Sderaadt* C BADRPT 109df930be7Sderaadt* b * * 110df930be7Sderaadt+ C BADRPT 111df930be7Sderaadt? C BADRPT 112df930be7Sderaadt"" &C EMPTY 113df930be7Sderaadt() - abc @abc 114df930be7Sderaadt\(\) b abc @abc 115df930be7Sderaadta||b C EMPTY 116df930be7Sderaadt|ab C EMPTY 117df930be7Sderaadtab| C EMPTY 118df930be7Sderaadt(|a)b C EMPTY 119df930be7Sderaadt(a|)b C EMPTY 120df930be7Sderaadt(*a) C BADRPT 121df930be7Sderaadt(+a) C BADRPT 122df930be7Sderaadt(?a) C BADRPT 123df930be7Sderaadt({1}a) C BADRPT 124df930be7Sderaadt\(\{1\}a\) bC BADRPT 125df930be7Sderaadt(a|*b) C BADRPT 126df930be7Sderaadt(a|+b) C BADRPT 127df930be7Sderaadt(a|?b) C BADRPT 128df930be7Sderaadt(a|{1}b) C BADRPT 129df930be7Sderaadt^* C BADRPT 130df930be7Sderaadt^* b * * 131df930be7Sderaadt^+ C BADRPT 132df930be7Sderaadt^? C BADRPT 133df930be7Sderaadt^{1} C BADRPT 134df930be7Sderaadt^\{1\} bC BADRPT 135df930be7Sderaadt 136df930be7Sderaadt# metacharacters, backslashes 137df930be7Sderaadta.c & abc abc 138df930be7Sderaadta[bc]d & abd abd 139df930be7Sderaadta\*c & a*c a*c 140df930be7Sderaadta\\b & a\b a\b 141df930be7Sderaadta\\\*b & a\*b a\*b 142df930be7Sderaadta\bc & abc abc 143df930be7Sderaadta\ &C EESCAPE 144df930be7Sderaadta\\bc & a\bc a\bc 145df930be7Sderaadt\{ bC BADRPT 146df930be7Sderaadta\[b & a[b a[b 147df930be7Sderaadta[b &C EBRACK 148df930be7Sderaadt# trailing $ is a peculiar special case for the BRE code 149df930be7Sderaadta$ & a a 150df930be7Sderaadta$ & a$ 151df930be7Sderaadta\$ & a 152df930be7Sderaadta\$ & a$ a$ 153df930be7Sderaadta\\$ & a 154df930be7Sderaadta\\$ & a$ 155df930be7Sderaadta\\$ & a\$ 156df930be7Sderaadta\\$ & a\ a\ 157df930be7Sderaadt 158df930be7Sderaadt# back references, ugh 159df930be7Sderaadta\(b\)\2c bC ESUBREG 160df930be7Sderaadta\(b\1\)c bC ESUBREG 161df930be7Sderaadta\(b*\)c\1d b abbcbbd abbcbbd bb 162df930be7Sderaadta\(b*\)c\1d b abbcbd 163df930be7Sderaadta\(b*\)c\1d b abbcbbbd 164df930be7Sderaadt^\(.\)\1 b abc 165df930be7Sderaadta\([bc]\)\1d b abcdabbd abbd b 166df930be7Sderaadta\(\([bc]\)\2\)*d b abbccd abbccd 167df930be7Sderaadta\(\([bc]\)\2\)*d b abbcbd 168df930be7Sderaadt# actually, this next one probably ought to fail, but the spec is unclear 169df930be7Sderaadta\(\(b\)*\2\)*d b abbbd abbbd 170df930be7Sderaadt# here is a case that no NFA implementation does right 171df930be7Sderaadt\(ab*\)[ab]*\1 b ababaaa ababaaa a 172df930be7Sderaadt# check out normal matching in the presence of back refs 173df930be7Sderaadt\(a\)\1bcd b aabcd aabcd 174df930be7Sderaadt\(a\)\1bc*d b aabcd aabcd 175df930be7Sderaadt\(a\)\1bc*d b aabd aabd 176df930be7Sderaadt\(a\)\1bc*d b aabcccd aabcccd 177df930be7Sderaadt\(a\)\1bc*[ce]d b aabcccd aabcccd 178df930be7Sderaadt^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd 1792ff451efSotto\(b*\)\(a*\1\)* b ab a 180b6ae5db5Sotto\([^_]*\)\(_*\1\)* b foo_foo_bar_bar_bar_baz foo_foo foo,_foo 181b6ae5db5Sotto\([^_]*\)\(_*\1\)* b bar_bar_bar_baz bar_bar_bar bar,_bar 182b6ae5db5Sotto\([^_]*\)\(_*\1\)* b foo_bar_baz foo foo 18305c0ab40Sotto\(.*\)\1 b "" "" 18405c0ab40Sotto\(.*\)\1 b a "" 18505c0ab40Sotto\(.*\)\1 b aa aa 18605c0ab40Sotto\(.*\)\1 b aaa aa 18705c0ab40Sotto\(.*\)\1 b aaaa aaaa 18805c0ab40Sotto\([^_]*\)\1 b "" "" 18905c0ab40Sotto\([^_]*\)\1 b a "" 19005c0ab40Sotto\([^_]*\)\1 b aa aa 19105c0ab40Sotto\([^_]*\)\1 b aaa aa 19205c0ab40Sotto\([^_]*\)\1 b aaaa aaaa 1932ff451efSottofoo\(.*\)bar\1 b foolbarl foolbarl l 1942ff451efSottofoo\(.*\)bar\1 b foobar foobar "" 1952ff451efSotto\(\(.\)b\)*\1 b aba 1962ff451efSotto\(\(.\)b\)*\1 b abba 1972ff451efSotto\(\(.\)b\)*\1 b abbba 1982ff451efSotto\(\(.\)b\)*\1 b abbbba bbbb bb,b 1992ff451efSotto\(\(.\)b\)*\1 b abbbbba abbbbb bb,b 2002ff451efSotto\(\(.\)b\)*\1 b abbbbbba abbbbb bb,b 2012ff451efSotto\(\(.\)b\)*\1 b abbbbbbbbbbbbbba abbbbbbbbbbbbb bb,b 2022ff451efSotto\(\(.\)b\)*\1 b abbbbbbbbbbbbbbba abbbbbbbbbbbbbbb bb,b 20331242beeSschwarze# these used to segfault, buffer underflow in engine.c, backref() 20431242beeSschwarze\(^a\)*\(b.\)\2 b^ sbxbxe bxbx -,bx 20531242beeSschwarze\([[:<:]]a\)*\(b.\)\2 b^ sbxbxe bxbx -,bx 206df930be7Sderaadt 207df930be7Sderaadt# ordinary repetitions 208df930be7Sderaadtab*c & abc abc 209df930be7Sderaadtab+c - abc abc 210df930be7Sderaadtab?c - abc abc 211df930be7Sderaadta\(*\)b b a*b a*b 212df930be7Sderaadta\(**\)b b ab ab 213df930be7Sderaadta\(***\)b bC BADRPT 214df930be7Sderaadt*a b *a *a 215df930be7Sderaadt**a b a a 216df930be7Sderaadt***a bC BADRPT 217df930be7Sderaadt 218df930be7Sderaadt# the dreaded bounded repetitions 219df930be7Sderaadt{ & { { 220df930be7Sderaadt{abc & {abc {abc 221df930be7Sderaadt{1 C BADRPT 222df930be7Sderaadt{1} C BADRPT 223df930be7Sderaadta{b & a{b a{b 224df930be7Sderaadta{1}b - ab ab 225df930be7Sderaadta\{1\}b b ab ab 226df930be7Sderaadta{1,}b - ab ab 227df930be7Sderaadta\{1,\}b b ab ab 228df930be7Sderaadta{1,2}b - aab aab 229df930be7Sderaadta\{1,2\}b b aab aab 230df930be7Sderaadta{1 C EBRACE 231df930be7Sderaadta\{1 bC EBRACE 232df930be7Sderaadta{1a C EBRACE 233df930be7Sderaadta\{1a bC EBRACE 234df930be7Sderaadta{1a} C BADBR 235df930be7Sderaadta\{1a\} bC BADBR 236df930be7Sderaadta{,2} - a{,2} a{,2} 237df930be7Sderaadta\{,2\} bC BADBR 238df930be7Sderaadta{,} - a{,} a{,} 239df930be7Sderaadta\{,\} bC BADBR 240df930be7Sderaadta{1,x} C BADBR 241df930be7Sderaadta\{1,x\} bC BADBR 242df930be7Sderaadta{1,x C EBRACE 243df930be7Sderaadta\{1,x bC EBRACE 244df930be7Sderaadta{300} C BADBR 245df930be7Sderaadta\{300\} bC BADBR 246df930be7Sderaadta{1,0} C BADBR 247df930be7Sderaadta\{1,0\} bC BADBR 248df930be7Sderaadtab{0,0}c - abcac ac 249df930be7Sderaadtab\{0,0\}c b abcac ac 250df930be7Sderaadtab{0,1}c - abcac abc 251df930be7Sderaadtab\{0,1\}c b abcac abc 252df930be7Sderaadtab{0,3}c - abbcac abbc 253df930be7Sderaadtab\{0,3\}c b abbcac abbc 254df930be7Sderaadtab{1,1}c - acabc abc 255df930be7Sderaadtab\{1,1\}c b acabc abc 256df930be7Sderaadtab{1,3}c - acabc abc 257df930be7Sderaadtab\{1,3\}c b acabc abc 258df930be7Sderaadtab{2,2}c - abcabbc abbc 259df930be7Sderaadtab\{2,2\}c b abcabbc abbc 260df930be7Sderaadtab{2,4}c - abcabbc abbc 261df930be7Sderaadtab\{2,4\}c b abcabbc abbc 262df930be7Sderaadt((a{1,10}){1,10}){1,10} - a a a,a 263df930be7Sderaadt 264df930be7Sderaadt# multiple repetitions 265df930be7Sderaadta** &C BADRPT 266df930be7Sderaadta++ C BADRPT 267df930be7Sderaadta?? C BADRPT 268df930be7Sderaadta*+ C BADRPT 269df930be7Sderaadta*? C BADRPT 270df930be7Sderaadta+* C BADRPT 271df930be7Sderaadta+? C BADRPT 272df930be7Sderaadta?* C BADRPT 273df930be7Sderaadta?+ C BADRPT 274df930be7Sderaadta{1}{1} C BADRPT 275df930be7Sderaadta*{1} C BADRPT 276df930be7Sderaadta+{1} C BADRPT 277df930be7Sderaadta?{1} C BADRPT 278df930be7Sderaadta{1}* C BADRPT 279df930be7Sderaadta{1}+ C BADRPT 280df930be7Sderaadta{1}? C BADRPT 281df930be7Sderaadta*{b} - a{b} a{b} 282df930be7Sderaadta\{1\}\{1\} bC BADRPT 283df930be7Sderaadta*\{1\} bC BADRPT 284df930be7Sderaadta\{1\}* bC BADRPT 285df930be7Sderaadt 286df930be7Sderaadt# brackets, and numerous perversions thereof 287df930be7Sderaadta[b]c & abc abc 288df930be7Sderaadta[ab]c & abc abc 289df930be7Sderaadta[^ab]c & adc adc 290df930be7Sderaadta[]b]c & a]c a]c 291df930be7Sderaadta[[b]c & a[c a[c 292df930be7Sderaadta[-b]c & a-c a-c 293df930be7Sderaadta[^]b]c & adc adc 294df930be7Sderaadta[^-b]c & adc adc 295df930be7Sderaadta[b-]c & a-c a-c 296df930be7Sderaadta[b &C EBRACK 297df930be7Sderaadta[] &C EBRACK 298df930be7Sderaadta[1-3]c & a2c a2c 299df930be7Sderaadta[3-1]c &C ERANGE 300df930be7Sderaadta[1-3-5]c &C ERANGE 301df930be7Sderaadta[[.-.]--]c & a-c a-c 302df930be7Sderaadta[1- &C ERANGE 303df930be7Sderaadta[[. &C EBRACK 304df930be7Sderaadta[[.x &C EBRACK 305df930be7Sderaadta[[.x. &C EBRACK 306df930be7Sderaadta[[.x.] &C EBRACK 307df930be7Sderaadta[[.x.]] & ax ax 308df930be7Sderaadta[[.x,.]] &C ECOLLATE 309df930be7Sderaadta[[.one.]]b & a1b a1b 310df930be7Sderaadta[[.notdef.]]b &C ECOLLATE 311df930be7Sderaadta[[.].]]b & a]b a]b 312df930be7Sderaadta[[:alpha:]]c & abc abc 313df930be7Sderaadta[[:notdef:]]c &C ECTYPE 314df930be7Sderaadta[[: &C EBRACK 315df930be7Sderaadta[[:alpha &C EBRACK 316df930be7Sderaadta[[:alpha:] &C EBRACK 317df930be7Sderaadta[[:alpha,:] &C ECTYPE 318df930be7Sderaadta[[:]:]]b &C ECTYPE 319df930be7Sderaadta[[:-:]]b &C ECTYPE 320df930be7Sderaadta[[:alph:]] &C ECTYPE 321df930be7Sderaadta[[:alphabet:]] &C ECTYPE 322df930be7Sderaadt[[:alnum:]]+ - -%@a0X- a0X 323df930be7Sderaadt[[:alpha:]]+ - -%@aX0- aX 324df930be7Sderaadt[[:blank:]]+ - aSSTb SST 325df930be7Sderaadt[[:cntrl:]]+ - aNTb NT 326df930be7Sderaadt[[:digit:]]+ - a019b 019 327df930be7Sderaadt[[:graph:]]+ - Sa%bS a%b 328df930be7Sderaadt[[:lower:]]+ - AabC ab 329df930be7Sderaadt[[:print:]]+ - NaSbN aSb 330df930be7Sderaadt[[:punct:]]+ - S%-&T %-& 331df930be7Sderaadt[[:space:]]+ - aSNTb SNT 332df930be7Sderaadt[[:upper:]]+ - aBCd BC 333df930be7Sderaadt[[:xdigit:]]+ - p0f3Cq 0f3C 334df930be7Sderaadta[[=b=]]c & abc abc 335df930be7Sderaadta[[= &C EBRACK 336df930be7Sderaadta[[=b &C EBRACK 337df930be7Sderaadta[[=b= &C EBRACK 338df930be7Sderaadta[[=b=] &C EBRACK 339df930be7Sderaadta[[=b,=]] &C ECOLLATE 340df930be7Sderaadta[[=one=]]b & a1b a1b 341df930be7Sderaadt 342df930be7Sderaadt# complexities 343df930be7Sderaadta(((b)))c - abc abc 344df930be7Sderaadta(b|(c))d - abd abd 345df930be7Sderaadta(b*|c)d - abbd abbd 346df930be7Sderaadt# just gotta have one DFA-buster, of course 347df930be7Sderaadta[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 348df930be7Sderaadt# and an inline expansion in case somebody gets tricky 349df930be7Sderaadta[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 350df930be7Sderaadt# and in case somebody just slips in an NFA... 351df930be7Sderaadta[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 352df930be7Sderaadt# fish for anomalies as the number of states passes 32 353df930be7Sderaadt12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 354df930be7Sderaadt123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 355df930be7Sderaadt1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 356df930be7Sderaadt12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 357df930be7Sderaadt123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 358df930be7Sderaadt# and one really big one, beyond any plausible word width 359df930be7Sderaadt1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 360df930be7Sderaadt# fish for problems as brackets go past 8 361df930be7Sderaadt[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm 362df930be7Sderaadt[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo 363df930be7Sderaadt[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq 364df930be7Sderaadt[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq 365df930be7Sderaadt 366df930be7Sderaadt# subtleties of matching 367df930be7Sderaadtabc & xabcy abc 368df930be7Sderaadta\(b\)?c\1d b acd 369df930be7SderaadtaBc i Abc Abc 370df930be7Sderaadta[Bc]*d i abBCcd abBCcd 371df930be7Sderaadt0[[:upper:]]1 &i 0a1 0a1 372df930be7Sderaadt0[[:lower:]]1 &i 0A1 0A1 373df930be7Sderaadta[^b]c &i abc 374df930be7Sderaadta[^b]c &i aBc 375df930be7Sderaadta[^b]c &i adc adc 376df930be7Sderaadt[a]b[c] - abc abc 377df930be7Sderaadt[a]b[a] - aba aba 378df930be7Sderaadt[abc]b[abc] - abc abc 379df930be7Sderaadt[abc]b[abd] - abd abd 380df930be7Sderaadta(b?c)+d - accd accd 381df930be7Sderaadt(wee|week)(knights|night) - weeknights weeknights 382df930be7Sderaadt(we|wee|week|frob)(knights|night|day) - weeknights weeknights 383df930be7Sderaadta[bc]d - xyzaaabcaababdacd abd 384df930be7Sderaadta[ab]c - aaabc abc 385df930be7Sderaadtabc s abc abc 386df930be7Sderaadta* & b @b 387df930be7Sderaadt 388df930be7Sderaadt# Let's have some fun -- try to match a C comment. 389df930be7Sderaadt# first the obvious, which looks okay at first glance... 390df930be7Sderaadt/\*.*\*/ - /*x*/ /*x*/ 391df930be7Sderaadt# but... 392df930be7Sderaadt/\*.*\*/ - /*x*/y/*z*/ /*x*/y/*z*/ 393df930be7Sderaadt# okay, we must not match */ inside; try to do that... 394df930be7Sderaadt/\*([^*]|\*[^/])*\*/ - /*x*/ /*x*/ 395df930be7Sderaadt/\*([^*]|\*[^/])*\*/ - /*x*/y/*z*/ /*x*/ 396df930be7Sderaadt# but... 397df930be7Sderaadt/\*([^*]|\*[^/])*\*/ - /*x**/y/*z*/ /*x**/y/*z*/ 398df930be7Sderaadt# and a still fancier version, which does it right (I think)... 399df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x*/ /*x*/ 400df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x*/y/*z*/ /*x*/ 401df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x**/y/*z*/ /*x**/ 402df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x****/y/*z*/ /*x****/ 403df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x**x*/y/*z*/ /*x**x*/ 404df930be7Sderaadt/\*([^*]|\*+[^*/])*\*+/ - /*x***x/y/*z*/ /*x***x/y/*z*/ 405df930be7Sderaadt 406df930be7Sderaadt# subexpressions 407df930be7Sderaadta(b)(c)d - abcd abcd b,c 408df930be7Sderaadta(((b)))c - abc abc b,b,b 409df930be7Sderaadta(b|(c))d - abd abd b,- 410df930be7Sderaadta(b*|c|e)d - abbd abbd bb 411df930be7Sderaadta(b*|c|e)d - acd acd c 412df930be7Sderaadta(b*|c|e)d - ad ad @d 413df930be7Sderaadta(b?)c - abc abc b 414df930be7Sderaadta(b?)c - ac ac @c 415df930be7Sderaadta(b+)c - abc abc b 416df930be7Sderaadta(b+)c - abbbc abbbc bbb 417df930be7Sderaadta(b*)c - ac ac @c 418df930be7Sderaadt(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de 419df930be7Sderaadt# the regression tester only asks for 9 subexpressions 420df930be7Sderaadta(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j 421df930be7Sderaadta(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k 422df930be7Sderaadta([bc]?)c - abc abc b 423df930be7Sderaadta([bc]?)c - ac ac @c 424df930be7Sderaadta([bc]+)c - abc abc b 425df930be7Sderaadta([bc]+)c - abcc abcc bc 426df930be7Sderaadta([bc]+)bc - abcbc abcbc bc 427df930be7Sderaadta(bb+|b)b - abb abb b 428df930be7Sderaadta(bbb+|bb+|b)b - abb abb b 429df930be7Sderaadta(bbb+|bb+|b)b - abbb abbb bb 430df930be7Sderaadta(bbb+|bb+|b)bb - abbb abbb b 431df930be7Sderaadt(.*).* - abcdef abcdef abcdef 432df930be7Sderaadt(a*)* - bc @b @b 433df930be7Sderaadt 434df930be7Sderaadt# do we get the right subexpression when it is used more than once? 435df930be7Sderaadta(b|c)*d - ad ad - 436df930be7Sderaadta(b|c)*d - abcd abcd c 437df930be7Sderaadta(b|c)+d - abd abd b 438df930be7Sderaadta(b|c)+d - abcd abcd c 439df930be7Sderaadta(b|c?)+d - ad ad @d 440df930be7Sderaadta(b|c?)+d - abcd abcd @d 441df930be7Sderaadta(b|c){0,0}d - ad ad - 442df930be7Sderaadta(b|c){0,1}d - ad ad - 443df930be7Sderaadta(b|c){0,1}d - abd abd b 444df930be7Sderaadta(b|c){0,2}d - ad ad - 445df930be7Sderaadta(b|c){0,2}d - abcd abcd c 446df930be7Sderaadta(b|c){0,}d - ad ad - 447df930be7Sderaadta(b|c){0,}d - abcd abcd c 448df930be7Sderaadta(b|c){1,1}d - abd abd b 449df930be7Sderaadta(b|c){1,1}d - acd acd c 450df930be7Sderaadta(b|c){1,2}d - abd abd b 451df930be7Sderaadta(b|c){1,2}d - abcd abcd c 452df930be7Sderaadta(b|c){1,}d - abd abd b 453df930be7Sderaadta(b|c){1,}d - abcd abcd c 454df930be7Sderaadta(b|c){2,2}d - acbd acbd b 455df930be7Sderaadta(b|c){2,2}d - abcd abcd c 456df930be7Sderaadta(b|c){2,4}d - abcd abcd c 457df930be7Sderaadta(b|c){2,4}d - abcbd abcbd b 458df930be7Sderaadta(b|c){2,4}d - abcbcd abcbcd c 459df930be7Sderaadta(b|c){2,}d - abcd abcd c 460df930be7Sderaadta(b|c){2,}d - abcbd abcbd b 461df930be7Sderaadta(b+|((c)*))+d - abd abd @d,@d,- 462df930be7Sderaadta(b+|((c)*))+d - abcd abcd @d,@d,- 463df930be7Sderaadt 464df930be7Sderaadt# check out the STARTEND option 46509cba3fbSschwarze^[abc] &# a(b)c b 46609cba3fbSschwarze^[abc] &# a(xb)c 46709cba3fbSschwarze^[abc] &# aN(b)c b 46809cba3fbSschwarze^[abc] &n# a(b)c b 46909cba3fbSschwarze^[abc] &n# a(xb)c 47009cba3fbSschwarze^[abc] &n# aN(b)c b 47109cba3fbSschwarze^[abc] &^# a(b)c 47209cba3fbSschwarze^[abc] &^# a(xb)c 47309cba3fbSschwarze^[abc] &^# aN(b)c 47409cba3fbSschwarze^[abc] &n^# a(b)c 47509cba3fbSschwarze^[abc] &n^# a(xb)c 47609cba3fbSschwarze^[abc] &n^# aN(b)c b 477df930be7Sderaadt[abc] &# a(d)c 478df930be7Sderaadt[abc] &# a(bc)d b 479df930be7Sderaadt[abc] &# a(dc)d c 480df930be7Sderaadt. &# a()c 481df930be7Sderaadtb.*c &# b(bc)c bc 482df930be7Sderaadtb.* &# b(bc)c bc 483df930be7Sderaadt.*c &# b(bc)c bc 484df930be7Sderaadt 485df930be7Sderaadt# plain strings, with the NOSPEC flag 486df930be7Sderaadtabc m abc abc 487df930be7Sderaadtabc m xabcy abc 488df930be7Sderaadtabc m xyz 489df930be7Sderaadta*b m aba*b a*b 490df930be7Sderaadta*b m ab 491df930be7Sderaadt"" mC EMPTY 492df930be7Sderaadt 493df930be7Sderaadt# cases involving NULs 494df930be7SderaadtaZb & a a 495df930be7SderaadtaZb &p a 496df930be7SderaadtaZb &p# (aZb) aZb 497df930be7SderaadtaZ*b &p# (ab) ab 498df930be7Sderaadta.b &# (aZb) aZb 499df930be7Sderaadta.* &# (aZb)c aZb 500df930be7Sderaadt 501df930be7Sderaadt# word boundaries (ick) 502df930be7Sderaadt[[:<:]]a & a a 503b2695360Sdoug\<a & a a 504df930be7Sderaadt[[:<:]]a & ba 505b2695360Sdoug\<a & ba 506df930be7Sderaadt[[:<:]]a & -a a 507b2695360Sdoug\<a & -a a 50809cba3fbSschwarze[[:<:]]a & Na a 50909cba3fbSschwarze\<a & Na a 51009cba3fbSschwarze[[:<:]]a &n a a 51109cba3fbSschwarze\<a &n a a 51209cba3fbSschwarze[[:<:]]a &n ba 51309cba3fbSschwarze\<a &n ba 51409cba3fbSschwarze[[:<:]]a &n -a a 51509cba3fbSschwarze\<a &n -a a 51609cba3fbSschwarze[[:<:]]a &n Na a 51709cba3fbSschwarze\<a &n Na a 51809cba3fbSschwarze[[:<:]]a &^ a 51909cba3fbSschwarze\<a &^ a 52009cba3fbSschwarze[[:<:]]a &^ ba 52109cba3fbSschwarze\<a &^ ba 52209cba3fbSschwarze[[:<:]]a &^ -a a 52309cba3fbSschwarze\<a &^ -a a 52409cba3fbSschwarze[[:<:]]a &^ Na a 52509cba3fbSschwarze\<a &^ Na a 52609cba3fbSschwarze[[:<:]]a &n^ a 52709cba3fbSschwarze\<a &n^ a 52809cba3fbSschwarze[[:<:]]a &n^ ba 52909cba3fbSschwarze\<a &n^ ba 53009cba3fbSschwarze[[:<:]]a &n^ -a a 53109cba3fbSschwarze\<a &n^ -a a 53209cba3fbSschwarze[[:<:]]a &n^ Na a 53309cba3fbSschwarze\<a &n^ Na a 53409cba3fbSschwarze[[:<:]]b &# a(b)c b 53509cba3fbSschwarze\<b &# a(b)c b 53609cba3fbSschwarze[[:<:]]b &# a(xb)c 53709cba3fbSschwarze\<b &# a(xb)c 53809cba3fbSschwarze[[:<:]]b &# -(b)c b 53909cba3fbSschwarze\<b &# -(b)c b 54009cba3fbSschwarze[[:<:]]b &# aN(b)c b 54109cba3fbSschwarze\<b &# aN(b)c b 54209cba3fbSschwarze[[:<:]]b &n# a(b)c b 54309cba3fbSschwarze\<b &n# a(b)c b 54409cba3fbSschwarze[[:<:]]b &n# a(xb)c 54509cba3fbSschwarze\<b &n# a(xb)c 54609cba3fbSschwarze[[:<:]]b &n# -(b)c b 54709cba3fbSschwarze\<b &n# -(b)c b 54809cba3fbSschwarze[[:<:]]b &n# aN(b)c b 54909cba3fbSschwarze\<b &n# aN(b)c b 55009cba3fbSschwarze[[:<:]]b &^# a(b)c 55109cba3fbSschwarze\<b &^# a(b)c 55209cba3fbSschwarze[[:<:]]b &^# a(xb)c 55309cba3fbSschwarze\<b &^# a(xb)c 55409cba3fbSschwarze[[:<:]]b &^# -(b)c b 55509cba3fbSschwarze\<b &^# -(b)c b 55609cba3fbSschwarze[[:<:]]b &^# aN(b)c b 55709cba3fbSschwarze\<b &^# aN(b)c b 55809cba3fbSschwarze[[:<:]]b &n^# a(b)c 55909cba3fbSschwarze\<b &n^# a(b)c 56009cba3fbSschwarze[[:<:]]b &n^# a(xb)c 56109cba3fbSschwarze\<b &n^# a(xb)c 56209cba3fbSschwarze[[:<:]]b &n^# -(b)c b 56309cba3fbSschwarze\<b &n^# -(b)c b 56409cba3fbSschwarze[[:<:]]b &n^# aN(b)c b 56509cba3fbSschwarze\<b &n^# aN(b)c b 566df930be7Sderaadta[[:>:]] & a a 567b2695360Sdouga\> & a a 568df930be7Sderaadta[[:>:]] & ab 569b2695360Sdouga\> & ab 570df930be7Sderaadta[[:>:]] & a- a 571b2695360Sdouga\> & a- a 572df930be7Sderaadt[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc 573b2695360Sdoug\<a.c\> & axcd-dayc-dazce-abc abc 574df930be7Sderaadt[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc 575b2695360Sdoug\<a.c\> & axcd-dayc-dazce-abc-q abc 576df930be7Sderaadt[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc 577b2695360Sdoug\<a.c\> & axc-dayc-dazce-abc axc 578df930be7Sderaadt[[:<:]]b.c[[:>:]] & a_bxc-byc_d-bzc-q bzc 579b2695360Sdoug\<b.c\> & a_bxc-byc_d-bzc-q bzc 580df930be7Sderaadt[[:<:]].x..[[:>:]] & y_xa_-_xb_y-_xc_-axdc _xc_ 581b2695360Sdoug\<.x..\> & y_xa_-_xb_y-_xc_-axdc _xc_ 582df930be7Sderaadt[[:<:]]a_b[[:>:]] & x_a_b 583b2695360Sdoug\<a_b\> & x_a_b 584df930be7Sderaadt 585df930be7Sderaadt# past problems, and suspected problems 586df930be7Sderaadt(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 587df930be7Sderaadtabcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop 588df930be7Sderaadtabcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv 589df930be7Sderaadt(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 590df930be7SderaadtCC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 591df930be7SderaadtChar \([a-z0-9_]*\)\[.* b Char xyz[k Char xyz[k xyz 592df930be7Sderaadta?b - ab ab 593df930be7Sderaadt-\{0,1\}[0-9]*$ b -5 -5 594b6ae5db5Sotto 595b6faad1aSmillert# FreeBSD PR 130504 596b6faad1aSmillert(.|())(b) - ab ab 597b6faad1aSmillert(()|.)(b) - ab ab 598*8d4875efSotto 599*8d4875efSotto# Some BRE cases where \{0,\} makes a backref go wrong, as reported by Michael Paoli 600*8d4875efSottoY*\(x\)\1 b YYxx YYxx 601*8d4875efSottoY\{2,\}\(x\)\1 b YYxx YYxx 602*8d4875efSotto# Fails currently 603*8d4875efSotto#Y\{0,\}\(x\)\1 b YYxx YYxx 604*8d4875efSottoY\{0,\}\(x\) b YYxx YYx 605*8d4875efSottoY\{2,\}x\{1,\} b YYxx YYxx 606*8d4875efSottoY\{2,\}x\{0,\}z b YYxxz YYxxz 607*8d4875efSottoY\{0,\}x\{0,\}z b YYxxz YYxxz 608*8d4875efSottoY\{2,\}\(xy\)\1 b YYxyxy YYxyxy 609*8d4875efSotto# Fails currently 610*8d4875efSotto#Y\{0,\}\(xy\)\1 b YYxyxy YYxyxy 611*8d4875efSottoY*\(xy\)\1 b YYxyxy YYxyxy 612*8d4875efSottoY\{0,\}\(xy\)xy b YYxyxy YYxyxy 613