162856Sdcs# regular expression test set 262856Sdcs# $FreeBSD: releng/11.0/lib/libc/regex/grot/tests 197234 2009-09-15 21:15:29Z dds $ 362856Sdcs# Lines are at least three fields, separated by one or more tabs. "" stands 462856Sdcs# for an empty field. First field is an RE. Second field is flags. If 562856Sdcs# C flag given, regcomp() is expected to fail, and the third field is the 662856Sdcs# error name (minus the leading REG_). 762856Sdcs# 862856Sdcs# Otherwise it is expected to succeed, and the third field is the string to 962856Sdcs# try matching it against. If there is no fourth field, the match is 1062856Sdcs# expected to fail. If there is a fourth field, it is the substring that 1162856Sdcs# the RE is expected to match. If there is a fifth field, it is a comma- 1262856Sdcs# separated list of what the subexpressions should match, with - indicating 1362856Sdcs# no match for that one. In both the fourth and fifth fields, a (sub)field 1462856Sdcs# starting with @ indicates that the (sub)expression is expected to match 1562856Sdcs# a null string followed by the stuff after the @; this provides a way to 1662856Sdcs# test where null strings match. The character `N' in REs and strings 1762856Sdcs# is newline, `S' is space, `T' is tab, `Z' is NUL. 1862856Sdcs# 1962856Sdcs# The full list of flags: 2062856Sdcs# - placeholder, does nothing 2162856Sdcs# b RE is a BRE, not an ERE 2262856Sdcs# & try it as both an ERE and a BRE 2362856Sdcs# C regcomp() error expected, third field is error name 2462856Sdcs# i REG_ICASE 2562856Sdcs# m ("mundane") REG_NOSPEC 2662856Sdcs# s REG_NOSUB (not really testable) 2762856Sdcs# n REG_NEWLINE 2862856Sdcs# ^ REG_NOTBOL 2962856Sdcs# $ REG_NOTEOL 3062856Sdcs# # REG_STARTEND (see below) 3162856Sdcs# p REG_PEND 3262856Sdcs# 3362856Sdcs# For REG_STARTEND, the start/end offsets are those of the substring 3462856Sdcs# enclosed in (). 3562856Sdcs 3662856Sdcs# basics 3762856Sdcsa & a a 3862856Sdcsabc & abc abc 3962856Sdcsabc|de - abc abc 4062856Sdcsa|b|c - abc a 4162856Sdcs 4262856Sdcs# parentheses and perversions thereof 4362856Sdcsa(b)c - abc abc 4462856Sdcsa\(b\)c b abc abc 4562856Sdcsa( C EPAREN 4662856Sdcsa( b a( a( 4762856Sdcsa\( - a( a( 4862856Sdcsa\( bC EPAREN 4962856Sdcsa\(b bC EPAREN 5062856Sdcsa(b C EPAREN 5162856Sdcsa(b b a(b a(b 5262856Sdcs# gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly) 5362856Sdcsa) - a) a) 5462856Sdcs) - ) ) 5562856Sdcs# end gagging (in a just world, those *should* give EPAREN) 5662856Sdcsa) b a) a) 5762856Sdcsa\) bC EPAREN 5862856Sdcs\) bC EPAREN 5962856Sdcsa()b - ab ab 6062856Sdcsa\(\)b b ab ab 6162856Sdcs 6262856Sdcs# anchoring and REG_NEWLINE 6362856Sdcs^abc$ & abc abc 6462856Sdcsa^b - a^b 6562856Sdcsa^b b a^b a^b 6662856Sdcsa$b - a$b 6762856Sdcsa$b b a$b a$b 6862856Sdcs^ & abc @abc 6962856Sdcs$ & abc @ 7062856Sdcs^$ & "" @ 7162856Sdcs$^ - "" @ 7262856Sdcs\($\)\(^\) b "" @ 7362856Sdcs# stop retching, those are legitimate (although disgusting) 7462856Sdcs^^ - "" @ 7562856Sdcs$$ - "" @ 7662856Sdcsb$ & abNc 7762856Sdcsb$ &n abNc b 7862856Sdcs^b$ & aNbNc 7962856Sdcs^b$ &n aNbNc b 8062856Sdcs^$ &n aNNb @Nb 8162856Sdcs^$ n abc 8262856Sdcs^$ n abcN @ 8362856Sdcs$^ n aNNb @Nb 8462856Sdcs\($\)\(^\) bn aNNb @Nb 8562856Sdcs^^ n^ aNNb @Nb 8662856Sdcs$$ n aNNb @NN 8762856Sdcs^a ^ a 8862856Sdcsa$ $ a 8962856Sdcs^a ^n aNb 9062856Sdcs^b ^n aNb b 9162856Sdcsa$ $n bNa 9262856Sdcsb$ $n bNa b 9362856Sdcsa*(^b$)c* - b b 9462856Sdcsa*\(^b$\)c* b b b 9562856Sdcs 9662856Sdcs# certain syntax errors and non-errors 9762856Sdcs| C EMPTY 9862856Sdcs| b | | 9962856Sdcs* C BADRPT 10062856Sdcs* b * * 10162856Sdcs+ C BADRPT 10262856Sdcs? C BADRPT 10362856Sdcs"" &C EMPTY 10462856Sdcs() - abc @abc 10562856Sdcs\(\) b abc @abc 10662856Sdcsa||b C EMPTY 10762856Sdcs|ab C EMPTY 10862856Sdcsab| C EMPTY 10962856Sdcs(|a)b C EMPTY 11062856Sdcs(a|)b C EMPTY 11162856Sdcs(*a) C BADRPT 11262856Sdcs(+a) C BADRPT 11362856Sdcs(?a) C BADRPT 11462856Sdcs({1}a) C BADRPT 11562856Sdcs\(\{1\}a\) bC BADRPT 11662856Sdcs(a|*b) C BADRPT 11762856Sdcs(a|+b) C BADRPT 11862856Sdcs(a|?b) C BADRPT 11962856Sdcs(a|{1}b) C BADRPT 12062856Sdcs^* C BADRPT 12162856Sdcs^* b * * 12262856Sdcs^+ C BADRPT 12362856Sdcs^? C BADRPT 12462856Sdcs^{1} C BADRPT 12562856Sdcs^\{1\} bC BADRPT 12662856Sdcs 12762856Sdcs# metacharacters, backslashes 12862856Sdcsa.c & abc abc 12962856Sdcsa[bc]d & abd abd 13062856Sdcsa\*c & a*c a*c 13162856Sdcsa\\b & a\b a\b 13262856Sdcsa\\\*b & a\*b a\*b 13362856Sdcsa\bc & abc abc 13462856Sdcsa\ &C EESCAPE 13562856Sdcsa\\bc & a\bc a\bc 13662856Sdcs\{ bC BADRPT 13762856Sdcs# trailing $ is a peculiar special case for the BRE code 13862856Sdcsa$ & a a 13962856Sdcsa$ & a$ 14062856Sdcsa\$ & a 14162856Sdcsa\$ & a$ a$ 14262856Sdcsa\\$ & a 14362856Sdcsa\\$ & a$ 14462856Sdcsa\\$ & a\$ 14562856Sdcsa\\$ & a\ a\ 14662856Sdcs 14762856Sdcs# back references, ugh 14862856Sdcsa\(b\)\2c bC ESUBREG 14962856Sdcsa\(b\1\)c bC ESUBREG 15062856Sdcsa\(b*\)c\1d b abbcbbd abbcbbd bb 15162856Sdcsa\(b*\)c\1d b abbcbd 15262856Sdcsa\(b*\)c\1d b abbcbbbd 15362856Sdcs^\(.\)\1 b abc 15462856Sdcsa\([bc]\)\1d b abcdabbd abbd b 15562856Sdcsa\(\([bc]\)\2\)*d b abbccd abbccd 15662856Sdcsa\(\([bc]\)\2\)*d b abbcbd 15762856Sdcs# actually, this next one probably ought to fail, but the spec is unclear 15862856Sdcsa\(\(b\)*\2\)*d b abbbd abbbd 15962856Sdcs# here is a case that no NFA implementation does right 16062856Sdcs\(ab*\)[ab]*\1 b ababaaa ababaaa a 16162856Sdcs# check out normal matching in the presence of back refs 16262856Sdcs\(a\)\1bcd b aabcd aabcd 16362856Sdcs\(a\)\1bc*d b aabcd aabcd 16462856Sdcs\(a\)\1bc*d b aabd aabd 16562856Sdcs\(a\)\1bc*d b aabcccd aabcccd 16662856Sdcs\(a\)\1bc*[ce]d b aabcccd aabcccd 16762856Sdcs^\(a\)\1b\(c\)*cd$ b aabcccd aabcccd 168167223Sdelphij\(b*\)\(a*\1\)* b ab a 169167223Sdelphij\([^_]*\)\(_*\1\)* b foo_foo_bar_bar_bar_baz foo_foo foo,_foo 170167223Sdelphij\([^_]*\)\(_*\1\)* b bar_bar_bar_baz bar_bar_bar bar,_bar 171167223Sdelphij\([^_]*\)\(_*\1\)* b foo_bar_baz foo foo 172167223Sdelphij\(.*\)\1 b "" "" 173167223Sdelphij\(.*\)\1 b a "" 174167223Sdelphij\(.*\)\1 b aa aa 175167223Sdelphij\(.*\)\1 b aaa aa 176167223Sdelphij\(.*\)\1 b aaaa aaaa 177167223Sdelphij\([^_]*\)\1 b "" "" 178167223Sdelphij\([^_]*\)\1 b a "" 179167223Sdelphij\([^_]*\)\1 b aa aa 180167223Sdelphij\([^_]*\)\1 b aaa aa 181167223Sdelphij\([^_]*\)\1 b aaaa aaaa 182167223Sdelphijfoo\(.*\)bar\1 b foolbarl foolbarl l 183167223Sdelphijfoo\(.*\)bar\1 b foobar foobar "" 184167223Sdelphij\(\(.\)b\)*\1 b aba 185167223Sdelphij\(\(.\)b\)*\1 b abba 186167223Sdelphij\(\(.\)b\)*\1 b abbba 187167223Sdelphij\(\(.\)b\)*\1 b abbbba bbbb bb,b 188167223Sdelphij\(\(.\)b\)*\1 b abbbbba abbbbb bb,b 189167223Sdelphij\(\(.\)b\)*\1 b abbbbbba abbbbb bb,b 190167223Sdelphij\(\(.\)b\)*\1 b abbbbbbbbbbbbbba abbbbbbbbbbbbb bb,b 191167223Sdelphij\(\(.\)b\)*\1 b abbbbbbbbbbbbbbba abbbbbbbbbbbbbbb bb,b 19262856Sdcs 19362856Sdcs# ordinary repetitions 19462856Sdcsab*c & abc abc 19562856Sdcsab+c - abc abc 19662856Sdcsab?c - abc abc 19762856Sdcsa\(*\)b b a*b a*b 19862856Sdcsa\(**\)b b ab ab 19962856Sdcsa\(***\)b bC BADRPT 20062856Sdcs*a b *a *a 20162856Sdcs**a b a a 20262856Sdcs***a bC BADRPT 20362856Sdcs 20462856Sdcs# the dreaded bounded repetitions 20562856Sdcs{ & { { 20662856Sdcs{abc & {abc {abc 20762856Sdcs{1 C BADRPT 20862856Sdcs{1} C BADRPT 20962856Sdcsa{b & a{b a{b 21062856Sdcsa{1}b - ab ab 21162856Sdcsa\{1\}b b ab ab 21262856Sdcsa{1,}b - ab ab 21362856Sdcsa\{1,\}b b ab ab 21462856Sdcsa{1,2}b - aab aab 21562856Sdcsa\{1,2\}b b aab aab 21662856Sdcsa{1 C EBRACE 21762856Sdcsa\{1 bC EBRACE 21862856Sdcsa{1a C EBRACE 21962856Sdcsa\{1a bC EBRACE 22062856Sdcsa{1a} C BADBR 22162856Sdcsa\{1a\} bC BADBR 22262856Sdcsa{,2} - a{,2} a{,2} 22362856Sdcsa\{,2\} bC BADBR 22462856Sdcsa{,} - a{,} a{,} 22562856Sdcsa\{,\} bC BADBR 22662856Sdcsa{1,x} C BADBR 22762856Sdcsa\{1,x\} bC BADBR 22862856Sdcsa{1,x C EBRACE 22962856Sdcsa\{1,x bC EBRACE 23062856Sdcsa{300} C BADBR 23162856Sdcsa\{300\} bC BADBR 23262856Sdcsa{1,0} C BADBR 23362856Sdcsa\{1,0\} bC BADBR 23462856Sdcsab{0,0}c - abcac ac 23562856Sdcsab\{0,0\}c b abcac ac 23662856Sdcsab{0,1}c - abcac abc 23762856Sdcsab\{0,1\}c b abcac abc 23862856Sdcsab{0,3}c - abbcac abbc 23962856Sdcsab\{0,3\}c b abbcac abbc 24062856Sdcsab{1,1}c - acabc abc 24162856Sdcsab\{1,1\}c b acabc abc 24262856Sdcsab{1,3}c - acabc abc 24362856Sdcsab\{1,3\}c b acabc abc 24462856Sdcsab{2,2}c - abcabbc abbc 24562856Sdcsab\{2,2\}c b abcabbc abbc 24662856Sdcsab{2,4}c - abcabbc abbc 24762856Sdcsab\{2,4\}c b abcabbc abbc 24862856Sdcs((a{1,10}){1,10}){1,10} - a a a,a 24962857Sdcs((a{1,10}){1,10}){1,10}bb - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabb aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabb 25062856Sdcs 25162856Sdcs# multiple repetitions 25262856Sdcsa** &C BADRPT 25362856Sdcsa++ C BADRPT 25462856Sdcsa?? C BADRPT 25562856Sdcsa*+ C BADRPT 25662856Sdcsa*? C BADRPT 25762856Sdcsa+* C BADRPT 25862856Sdcsa+? C BADRPT 25962856Sdcsa?* C BADRPT 26062856Sdcsa?+ C BADRPT 26162856Sdcsa{1}{1} C BADRPT 26262856Sdcsa*{1} C BADRPT 26362856Sdcsa+{1} C BADRPT 26462856Sdcsa?{1} C BADRPT 26562856Sdcsa{1}* C BADRPT 26662856Sdcsa{1}+ C BADRPT 26762856Sdcsa{1}? C BADRPT 26862856Sdcsa*{b} - a{b} a{b} 26962856Sdcsa\{1\}\{1\} bC BADRPT 27062856Sdcsa*\{1\} bC BADRPT 27162856Sdcsa\{1\}* bC BADRPT 27262856Sdcs 27362856Sdcs# brackets, and numerous perversions thereof 27462856Sdcsa[b]c & abc abc 27562856Sdcsa[ab]c & abc abc 27662856Sdcsa[^ab]c & adc adc 27762856Sdcsa[]b]c & a]c a]c 27862856Sdcsa[[b]c & a[c a[c 27962856Sdcsa[-b]c & a-c a-c 28062856Sdcsa[^]b]c & adc adc 28162856Sdcsa[^-b]c & adc adc 28262856Sdcsa[b-]c & a-c a-c 28362856Sdcsa[b &C EBRACK 28462856Sdcsa[] &C EBRACK 28562856Sdcsa[1-3]c & a2c a2c 28662856Sdcsa[3-1]c &C ERANGE 28762856Sdcsa[1-3-5]c &C ERANGE 28862856Sdcsa[[.-.]--]c & a-c a-c 28962856Sdcsa[1- &C ERANGE 29062856Sdcsa[[. &C EBRACK 29162856Sdcsa[[.x &C EBRACK 29262856Sdcsa[[.x. &C EBRACK 29362856Sdcsa[[.x.] &C EBRACK 29462856Sdcsa[[.x.]] & ax ax 29562856Sdcsa[[.x,.]] &C ECOLLATE 29662856Sdcsa[[.one.]]b & a1b a1b 29762856Sdcsa[[.notdef.]]b &C ECOLLATE 29862856Sdcsa[[.].]]b & a]b a]b 29962856Sdcsa[[:alpha:]]c & abc abc 30062856Sdcsa[[:notdef:]]c &C ECTYPE 30162856Sdcsa[[: &C EBRACK 30262856Sdcsa[[:alpha &C EBRACK 30362856Sdcsa[[:alpha:] &C EBRACK 30462856Sdcsa[[:alpha,:] &C ECTYPE 30562856Sdcsa[[:]:]]b &C ECTYPE 30662856Sdcsa[[:-:]]b &C ECTYPE 30762856Sdcsa[[:alph:]] &C ECTYPE 30862856Sdcsa[[:alphabet:]] &C ECTYPE 30962856Sdcs[[:alnum:]]+ - -%@a0X- a0X 31062856Sdcs[[:alpha:]]+ - -%@aX0- aX 31162856Sdcs[[:blank:]]+ - aSSTb SST 31262856Sdcs[[:cntrl:]]+ - aNTb NT 31362856Sdcs[[:digit:]]+ - a019b 019 31462856Sdcs[[:graph:]]+ - Sa%bS a%b 31562856Sdcs[[:lower:]]+ - AabC ab 31662856Sdcs[[:print:]]+ - NaSbN aSb 31762856Sdcs[[:punct:]]+ - S%-&T %-& 31862856Sdcs[[:space:]]+ - aSNTb SNT 31962856Sdcs[[:upper:]]+ - aBCd BC 32062856Sdcs[[:xdigit:]]+ - p0f3Cq 0f3C 32162856Sdcsa[[=b=]]c & abc abc 32262856Sdcsa[[= &C EBRACK 32362856Sdcsa[[=b &C EBRACK 32462856Sdcsa[[=b= &C EBRACK 32562856Sdcsa[[=b=] &C EBRACK 32662856Sdcsa[[=b,=]] &C ECOLLATE 32762856Sdcsa[[=one=]]b & a1b a1b 32862856Sdcs 32962856Sdcs# complexities 33062856Sdcsa(((b)))c - abc abc 33162856Sdcsa(b|(c))d - abd abd 33262856Sdcsa(b*|c)d - abbd abbd 33362856Sdcs# just gotta have one DFA-buster, of course 33462856Sdcsa[ab]{20} - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 33562856Sdcs# and an inline expansion in case somebody gets tricky 33662856Sdcsa[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] - aaaaabaaaabaaaabaaaab aaaaabaaaabaaaabaaaab 33762856Sdcs# and in case somebody just slips in an NFA... 33862856Sdcsa[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 33962856Sdcs# fish for anomalies as the number of states passes 32 34062856Sdcs12345678901234567890123456789 - a12345678901234567890123456789b 12345678901234567890123456789 34162856Sdcs123456789012345678901234567890 - a123456789012345678901234567890b 123456789012345678901234567890 34262856Sdcs1234567890123456789012345678901 - a1234567890123456789012345678901b 1234567890123456789012345678901 34362856Sdcs12345678901234567890123456789012 - a12345678901234567890123456789012b 12345678901234567890123456789012 34462856Sdcs123456789012345678901234567890123 - a123456789012345678901234567890123b 123456789012345678901234567890123 34562856Sdcs# and one really big one, beyond any plausible word width 34662856Sdcs1234567890123456789012345678901234567890123456789012345678901234567890 - a1234567890123456789012345678901234567890123456789012345678901234567890b 1234567890123456789012345678901234567890123456789012345678901234567890 34762856Sdcs# fish for problems as brackets go past 8 34862856Sdcs[ab][cd][ef][gh][ij][kl][mn] - xacegikmoq acegikm 34962856Sdcs[ab][cd][ef][gh][ij][kl][mn][op] - xacegikmoq acegikmo 35062856Sdcs[ab][cd][ef][gh][ij][kl][mn][op][qr] - xacegikmoqy acegikmoq 35162856Sdcs[ab][cd][ef][gh][ij][kl][mn][op][q] - xacegikmoqy acegikmoq 35262856Sdcs 35362856Sdcs# subtleties of matching 35462856Sdcsabc & xabcy abc 35562856Sdcsa\(b\)?c\1d b acd 35662856SdcsaBc i Abc Abc 35762856Sdcsa[Bc]*d i abBCcd abBCcd 35862856Sdcs0[[:upper:]]1 &i 0a1 0a1 35962856Sdcs0[[:lower:]]1 &i 0A1 0A1 36062856Sdcsa[^b]c &i abc 36162856Sdcsa[^b]c &i aBc 36262856Sdcsa[^b]c &i adc adc 36362856Sdcs[a]b[c] - abc abc 36462856Sdcs[a]b[a] - aba aba 36562856Sdcs[abc]b[abc] - abc abc 36662856Sdcs[abc]b[abd] - abd abd 36762856Sdcsa(b?c)+d - accd accd 36862856Sdcs(wee|week)(knights|night) - weeknights weeknights 36962856Sdcs(we|wee|week|frob)(knights|night|day) - weeknights weeknights 37062856Sdcsa[bc]d - xyzaaabcaababdacd abd 37162856Sdcsa[ab]c - aaabc abc 37262856Sdcsabc s abc abc 37362856Sdcs 37462856Sdcs# subexpressions 37562856Sdcsa(b)(c)d - abcd abcd b,c 37662856Sdcsa(((b)))c - abc abc b,b,b 37762856Sdcsa(b|(c))d - abd abd b,- 37862856Sdcsa(b*|c|e)d - abbd abbd bb 37962856Sdcsa(b*|c|e)d - acd acd c 38062856Sdcsa(b*|c|e)d - ad ad @d 38162856Sdcsa(b?)c - abc abc b 38262856Sdcsa(b?)c - ac ac @c 38362856Sdcsa(b+)c - abc abc b 38462856Sdcsa(b+)c - abbbc abbbc bbb 38562856Sdcsa(b*)c - ac ac @c 38662856Sdcs(a|ab)(bc([de]+)f|cde) - abcdef abcdef a,bcdef,de 38762856Sdcs# the regression tester only asks for 9 subexpressions 38862856Sdcsa(b)(c)(d)(e)(f)(g)(h)(i)(j)k - abcdefghijk abcdefghijk b,c,d,e,f,g,h,i,j 38962856Sdcsa(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l - abcdefghijkl abcdefghijkl b,c,d,e,f,g,h,i,j,k 39062856Sdcsa([bc]?)c - abc abc b 39162856Sdcsa([bc]?)c - ac ac @c 39262856Sdcsa([bc]+)c - abc abc b 39362856Sdcsa([bc]+)c - abcc abcc bc 39462856Sdcsa([bc]+)bc - abcbc abcbc bc 39562856Sdcsa(bb+|b)b - abb abb b 39662856Sdcsa(bbb+|bb+|b)b - abb abb b 39762856Sdcsa(bbb+|bb+|b)b - abbb abbb bb 39862856Sdcsa(bbb+|bb+|b)bb - abbb abbb b 39962856Sdcs(.*).* - abcdef abcdef abcdef 40062856Sdcs(a*)* - bc @b @b 40162856Sdcs 40262856Sdcs# do we get the right subexpression when it is used more than once? 40362856Sdcsa(b|c)*d - ad ad - 40462856Sdcsa(b|c)*d - abcd abcd c 40562856Sdcsa(b|c)+d - abd abd b 40662856Sdcsa(b|c)+d - abcd abcd c 40762856Sdcsa(b|c?)+d - ad ad @d 40862856Sdcsa(b|c?)+d - abcd abcd @d 40962856Sdcsa(b|c){0,0}d - ad ad - 41062856Sdcsa(b|c){0,1}d - ad ad - 41162856Sdcsa(b|c){0,1}d - abd abd b 41262856Sdcsa(b|c){0,2}d - ad ad - 41362856Sdcsa(b|c){0,2}d - abcd abcd c 41462856Sdcsa(b|c){0,}d - ad ad - 41562856Sdcsa(b|c){0,}d - abcd abcd c 41662856Sdcsa(b|c){1,1}d - abd abd b 41762856Sdcsa(b|c){1,1}d - acd acd c 41862856Sdcsa(b|c){1,2}d - abd abd b 41962856Sdcsa(b|c){1,2}d - abcd abcd c 42062856Sdcsa(b|c){1,}d - abd abd b 42162856Sdcsa(b|c){1,}d - abcd abcd c 42262856Sdcsa(b|c){2,2}d - acbd acbd b 42362856Sdcsa(b|c){2,2}d - abcd abcd c 42462856Sdcsa(b|c){2,4}d - abcd abcd c 42562856Sdcsa(b|c){2,4}d - abcbd abcbd b 42662856Sdcsa(b|c){2,4}d - abcbcd abcbcd c 42762856Sdcsa(b|c){2,}d - abcd abcd c 42862856Sdcsa(b|c){2,}d - abcbd abcbd b 42962856Sdcsa(b+|((c)*))+d - abd abd @d,@d,- 43062856Sdcsa(b+|((c)*))+d - abcd abcd @d,@d,- 43162856Sdcs 43262856Sdcs# check out the STARTEND option 43362856Sdcs[abc] &# a(b)c b 43462856Sdcs[abc] &# a(d)c 43562856Sdcs[abc] &# a(bc)d b 43662856Sdcs[abc] &# a(dc)d c 43762856Sdcs. &# a()c 43862856Sdcsb.*c &# b(bc)c bc 43962856Sdcsb.* &# b(bc)c bc 44062856Sdcs.*c &# b(bc)c bc 44162856Sdcs 44262856Sdcs# plain strings, with the NOSPEC flag 44362856Sdcsabc m abc abc 44462856Sdcsabc m xabcy abc 44562856Sdcsabc m xyz 44662856Sdcsa*b m aba*b a*b 44762856Sdcsa*b m ab 44862856Sdcs"" mC EMPTY 44962856Sdcs 45062856Sdcs# cases involving NULs 45162856SdcsaZb & a a 45262856SdcsaZb &p a 45362856SdcsaZb &p# (aZb) aZb 45462856SdcsaZ*b &p# (ab) ab 45562856Sdcsa.b &# (aZb) aZb 45662856Sdcsa.* &# (aZb)c aZb 45762856Sdcs 45862856Sdcs# word boundaries (ick) 45962856Sdcs[[:<:]]a & a a 46062856Sdcs[[:<:]]a & ba 46162856Sdcs[[:<:]]a & -a a 46262856Sdcsa[[:>:]] & a a 46362856Sdcsa[[:>:]] & ab 46462856Sdcsa[[:>:]] & a- a 46562856Sdcs[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc abc 46662856Sdcs[[:<:]]a.c[[:>:]] & axcd-dayc-dazce-abc-q abc 46762856Sdcs[[:<:]]a.c[[:>:]] & axc-dayc-dazce-abc axc 46862856Sdcs 46962856Sdcs# past problems 47062856Sdcs(A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A]) - A1 A1 47162856Sdcsabcdefghijklmnop i abcdefghijklmnop abcdefghijklmnop 47262856Sdcsabcdefghijklmnopqrstuv i abcdefghijklmnopqrstuv abcdefghijklmnopqrstuv 47362856Sdcs(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 47462856SdcsCC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a - CC11 CC11 475197234Sdds# PR 130504 476197234Sdds(.|())(b) - ab ab 477197234Sdds(()|.)(b) - ab ab 478