1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
  
     | 
    
      source [file dirname [info script]]/testing.tcl
needs cmd regexp
needs expr regexp_are {[regexp {\d} 1]}
# Test regexp counted repetitions
set n 0
foreach {pat str exp} {
	a+ bac a
	a{1,} bac a
	a* bac {{}}
	a{0,} bac {{}}
	aa+ bac {}
	a{2,} bac {}
	a{2,} bacaad aa
	a{3,} bacaad {}
	{a{2,}$} bacaad {}
	{a{2,}$} bacaa aa
	{a{2,}$} ba {}
	{a{2,}$} aa aa
	{a{0,0}b$} b b
	{a{1,1}b$} b {}
	{a{1,1}b$} cab ab
	{a{2,2}b$} cab {}
	{a{2,2}b$} cabaabx {}
	{a{2,2}b$} cacaab aab
	ca{2,4}b cacaab caab
	ca{2,3}b cacaab caab
	ca{2,3}b cacaaab caaab
	c(a|b){2,3}d xcbad {cbad a}
	c(a|b){2,3}d xcabbd {cabbd b}
	c(a|b){2,3}d xcbaaad {}
	a{4} baaaad aaaa
	a{2,5} baaaad aaaa
	a{1,3} baaaad aaa
	a{1,2} baaaad aa
	a{3,4} baaaad aaaa
	a{5,6} baaaad {}
	a{4}? baaaad aaaa
	a{2,5}? baaaad aa
	a{1,3}? baaaad a
	a{1,2}? baaaad a
	a{3,4}? baaaad aaa
	a{5,6}? baaaad {}
	(a|b){3,4}?def baaaad {}
	{\d{1,3}} 239 239
	(aa|bb)?cdef xcdabbaacdef {aacdef aa}
	(a|y)+ bac {a a}
	(a|y){1,} bac {a a}
	(a|y)* bac {{} {}}
	(a|y){0,} bac {{} {}}
	(a|y)a+ bac {}
	(a|y){2,} bac {}
	(a|y){2,} bacaad {aa a}
	(a|y){3,} bacaad {}
	{(a|y){2,}$} bacaad {}
	{(a|y){2,}$} bacaa {aa a}
	{(a|y){2,}$} ba {}
	{(a|y){2,}$} aa {aa a}
	{(a|y){0,0}b$} b {b {}}
	{(a|y){1,1}b$} b {}
	{(a|y){1,1}b$} cab {ab a}
	{(a|y){2,2}b$} cab {}
	{(a|y){2,2}b$} cabaabx {}
	{(a|y){2,2}b$} cacaab {aab a}
	c(a|y){2,4}b cacaab {caab a}
	c(a|y){2,3}b cacaab {caab a}
	c(a|y){2,3}b cacaaab {caaab a}
	c((a|y)|b){2,3}d xcbad {cbad a a}
	####c((a|y)|b){2,3}d xcabbd {cabbd b {}}
	c((a|y)|b){2,3}d xcbaaad {}
	(a|y){4} baaaad {aaaa a}
	(a|y){2,5} baaaad {aaaa a}
	(a|y){1,3} baaaad {aaa a}
	(a|y){1,2} baaaad {aa a}
	(a|y){3,4} baaaad {aaaa a}
	(a|y){5,6} baaaad {}
	(a|y){4}? baaaad {aaaa a}
	(a|y){2,5}? baaaad {aa a}
	(a|y){1,3}? baaaad {a a}
	(a|y){1,2}? baaaad {a a}
	(a|y){3,4}? baaaad {aaa a}
	(a|y){5,6}? baaaad {}
    {[[:alpha:]]+} _bcd56_ef bcd
    {[[:alnum:]]+} _bcd56_ef bcd56
    {[[:blank:]]+} "_b \t\n6cAF" "{ \t}"
    {[[:upper:]]+} "_b \t\n6cAF" {AF}
    {[[:lower:]]+} "_b \t\n6cAF" {b}
    {[[:cntrl:]]+} _bcd\x04z56_ef "\x04"
    {[[:print:]]+} "\v _b \t\n6cAF" {{ _b }}
    {[[:graph:]]+} " _,b \t\n6cAF" {_,b}
    {[[:punct:]]+} bcd56_,ef _,
    {[\w]+} :_bcd56_ef _bcd56_ef
    {[[:space:]]+} "_bc \t\r\n\f\v_" "{ \t\r\n\f\v}"
    {[\x41-\x43]+} "_ABCD_" ABC
    {\m.+\M} "#A test#" "{A test}"
    {\m.+?\M} "#A test#" "A"
    {\m\M} "a" ""
    {ab*c} xnbbmbbbc {}
    {.^xxx} yyy {}
    {\mb} "   abc   " ""
	####((a*)*b)*b aaaaaaaaaaaaaaaaaaaaaaaaab {b {} {}}
	####(a*)* aab {aa {}}
	{^([^:=]*)(:)?(=)?$} version {version version {} {}}
	{\Aab.} abc,abd abc
	{de.\Z} def,deh,dei dei
} {
	if {[string match #* $pat]} {
		continue
	}
	#puts \t[list $pat $str [regexp -inline -- $pat $str]]
	test regcount-1.[incr n] "Test: regexp $pat $str" [list regexp -inline -- $pat $str] $exp
}
test regcount-2.1 "regexp counts cleared" {
	set re "((a|b){1,2}(c{2,3}))"
	regexp -inline $re xabcccce
	regexp -inline $re xabcccce
} {abccc abccc b ccc}
testreport
 
     |