ref: 00b4628de66236f95e56919391ce3cf65fdbf23f
dir: /sys/src/libregexp/test/basic.rc/
#!/bin/rc
x=./$O.regexec
fn fail {
echo $* >[1=2]
exit $"*
}
fn M {
sub=`'('{echo $3}
if(! match=`'('{$x $1 $2 $#sub}) {
fail 'did not match:' $*
}
match=$match(1-$#sub)
if(! ~ $"match $"sub){
fail 'did not match:' $* '!=' $match
}
}
# The following license covers associated test data.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of THIS SOFTWARE FILE (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, and/or sell copies of the
# Software, and to permit persons to whom the Software is furnished to do
# so, subject to the following disclaimer:
#
# THIS SOFTWARE IS PROVIDED BY AT&T ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL AT&T BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
M 'abracadabra$' 'abracadabracadabra' '(7,18)'
M 'a...b' 'abababbb' '(2,7)'
M 'XXXXXX' '..XXXXXX' '(2,8)'
M '\)' '()' '(1,2)'
M 'a]' 'a]a' '(0,2)'
M '}' '}' '(0,1)'
M '\}' '}' '(0,1)'
M '\]' ']' '(0,1)'
M ']' ']' '(0,1)'
M ']' ']' '(0,1)'
M '{' '{' '(0,1)'
M '}' '}' '(0,1)'
M '^a' 'ax' '(0,1)'
M '\^a' 'a^a' '(1,3)'
M 'a\^' 'a^' '(0,2)'
M 'a$' 'aa' '(1,2)'
M 'a\$' 'a$' '(0,2)'
M '^$' '' '(0,0)'
M '$^' '' '(0,0)'
M 'a($)' 'aa' '(1,2)(2,2)'
M 'a*(^a)' 'aa' '(0,1)(0,1)'
M '(..)*(...)*' 'a' '(0,0)'
M '(..)*(...)*' 'abcd' '(0,4)(2,4)'
M '(ab|a)(bc|c)' 'abc' '(0,3)(0,2)(2,3)'
M '(ab)c|abc' 'abc' '(0,3)(0,2)'
M '((a|a)|a)' 'a' '(0,1)(0,1)(0,1)'
M '(a*)(a|aa)' 'aaaa' '(0,4)(0,3)(3,4)'
M 'a*(a.|aa)' 'aaaa' '(0,4)(2,4)'
M 'a(b)|c(d)|a(e)f' 'aef' '(0,3)(?,?)(?,?)(1,2)'
M '(a|b)?.*' 'b' '(0,1)(0,1)'
M '(a|b)c|a(b|c)' 'ac' '(0,2)(0,1)'
M '(a|b)c|a(b|c)' 'ab' '(0,2)(?,?)(1,2)'
M '(a|b)*c|(a|ab)*c' 'abc' '(0,3)(1,2)'
M '(a|b)*c|(a|ab)*c' 'xc' '(1,2)'
M '(.a|.b).*|.*(.a|.b)' 'xa' '(0,2)(0,2)'
M 'a?(ab|ba)ab' 'abab' '(0,4)(0,2)'
M 'ab|abab' 'abbabab' '(0,2)'
M 'aba|bab|bba' 'baaabbbaba' '(5,8)'
M 'aba|bab' 'baaabbbaba' '(6,9)'
M '(aa|aaa)*|(a|aaaaa)' 'aa' '(0,2)(0,2)'
M '(a.|.a.)*|(a|.a...)' 'aa' '(0,2)(0,2)'
M 'ab|a' 'xabc' '(1,3)'
M 'ab|a' 'xxabc' '(2,4)'
#M '(Ab|cD)*' 'aBcD' '(0,4)(2,4)'
M '[^\-]' '--a' '(2,3)'
M '[a\-]*' '--a' '(0,3)'
M '[a-m\-]*' '--amoma--' '(0,4)'
M ':::1:::0:|:::1:1:0:' ':::0:::1:::1:::0:' '(8,17)'
M ':::1:::0:|:::1:1:1:' ':::0:::1:::1:::0:' '(8,17)'
M '(a)(b)(c)' 'abc' '(0,3)(0,1)(1,2)(2,3)'
M 'xxx' 'xxx' '(0,3)'
M '(^|[ (,;])((([Ff]eb[^ ]* *|0*2/|\* */?)0*[6-7]))([^0-9]|$)' 'feb 6,' '(0,6)'
M '(^|[ (,;])((([Ff]eb[^ ]* *|0*2/|\* */?)0*[6-7]))([^0-9]|$)' '2/7' '(0,3)'
M '(^|[ (,;])((([Ff]eb[^ ]* *|0*2/|\* */?)0*[6-7]))([^0-9]|$)' 'feb 1,Feb 6' '(5,11)'
M '((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))' 'x' '(0,1)(0,1)(0,1)'
M '((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))*' 'xx' '(0,2)(1,2)(1,2)'
M 'a?(ab|ba)*' 'ababababababababababababababababababababababababababababababababababababababababa' '(0,81)(79,81)'
M 'abaa|abbaa|abbbaa|abbbbaa' 'ababbabbbabbbabbbbabbbbaa' '(18,25)'
M 'abaa|abbaa|abbbaa|abbbbaa' 'ababbabbbabbbabbbbabaa' '(18,22)'
M 'aaac|aabc|abac|abbc|baac|babc|bbac|bbbc' 'baaabbbabac' '(7,11)'
M 'a*a*a*a*a*b' 'aaaaaaaaab' '(0,10)'
M '^' '' '(0,0)'
M '$' '' '(0,0)'
M '^$' '' '(0,0)'
M '^a$' 'a' '(0,1)'
M 'abc' 'abc' '(0,3)'
M 'abc' 'xabcy' '(1,4)'
M 'abc' 'ababc' '(2,5)'
M 'ab*c' 'abc' '(0,3)'
M 'ab*bc' 'abc' '(0,3)'
M 'ab*bc' 'abbc' '(0,4)'
M 'ab*bc' 'abbbbc' '(0,6)'
M 'ab+bc' 'abbc' '(0,4)'
M 'ab+bc' 'abbbbc' '(0,6)'
M 'ab?bc' 'abbc' '(0,4)'
M 'ab?bc' 'abc' '(0,3)'
M 'ab?c' 'abc' '(0,3)'
M '^abc$' 'abc' '(0,3)'
M '^abc' 'abcc' '(0,3)'
M 'abc$' 'aabc' '(1,4)'
M '^' 'abc' '(0,0)'
M '$' 'abc' '(3,3)'
M 'a.c' 'abc' '(0,3)'
M 'a.c' 'axc' '(0,3)'
M 'a.*c' 'axyzc' '(0,5)'
M 'a[bc]d' 'abd' '(0,3)'
M 'a[b-d]e' 'ace' '(0,3)'
M 'a[b-d]' 'aac' '(1,3)'
M 'a[\-b]' 'a-' '(0,2)'
M 'a[b\-]' 'a-' '(0,2)'
M 'a]' 'a]' '(0,2)'
M 'a[\]]b' 'a]b' '(0,3)'
M 'a[^bc]d' 'aed' '(0,3)'
M 'a[^\-b]c' 'adc' '(0,3)'
M 'a[^\]b]c' 'adc' '(0,3)'
M 'ab|cd' 'abc' '(0,2)'
M 'ab|cd' 'abcd' '(0,2)'
M 'a\(b' 'a(b' '(0,3)'
M 'a\(*b' 'ab' '(0,2)'
M 'a\(*b' 'a((b' '(0,4)'
M '((a))' 'abc' '(0,1)(0,1)(0,1)'
M '(a)b(c)' 'abc' '(0,3)(0,1)(2,3)'
M 'a+b+c' 'aabbabc' '(4,7)'
M 'a*' 'aaa' '(0,3)'
M '(^)*' '-' '(0,0)(?,?)'
M '(a*)*' '-' '(0,0)(?,?)'
M '(a*)+' '-' '(0,0)(0,0)'
M '(a*|b)*' '-' '(0,0)(?,?)'
M '((a*|b))*' '-' '(0,0)(?,?)(?,?)'
M '(a+|b)*' 'ab' '(0,2)(1,2)'
M '(a+|b)+' 'ab' '(0,2)(1,2)'
M '(a+|b)?' 'ab' '(0,1)(0,1)'
M '[^ab]*' 'cde' '(0,3)'
M 'a*' '' '(0,0)'
M '([abc])*d' 'abbbcd' '(0,6)(4,5)'
M '([abc])*bcd' 'abcd' '(0,4)(0,1)'
M 'a|b|c|d|e' 'e' '(0,1)'
M '(a|b|c|d|e)f' 'ef' '(0,2)(0,1)'
M 'abcd*efg' 'abcdefg' '(0,7)'
M 'ab*' 'xabyabbbz' '(1,3)'
M 'ab*' 'xayabbbz' '(1,2)'
M '(ab|cd)e' 'abcde' '(2,5)(2,4)'
M '[abhgefdc]ij' 'hij' '(0,3)'
M '(a|b)c*d' 'abcd' '(1,4)(1,2)'
M '(ab|ab*)bc' 'abc' '(0,3)(0,1)'
M 'a([bc]*)c*' 'abc' '(0,3)(1,3)'
M 'a([bc]*)(c*d)' 'abcd' '(0,4)(1,3)(3,4)'
M 'a([bc]+)(c*d)' 'abcd' '(0,4)(1,3)(3,4)'
M 'a([bc]*)(c+d)' 'abcd' '(0,4)(1,2)(2,4)'
M 'a[bcd]*dcdcde' 'adcdcde' '(0,7)'
M '(ab|a)b*c' 'abc' '(0,3)(0,2)'
M '((a)(b)c)(d)' 'abcd' '(0,4)(0,3)(0,1)(1,2)(3,4)'
M '[A-Za-z_][A-Za-z0-9_]*' 'alpha' '(0,5)'
M '^a(bc+|b[eh])g|.h$' 'abh' '(1,3)'
M '(bc+d$|ef*g.|h?i(j|k))' 'effgz' '(0,5)(0,5)'
M '(bc+d$|ef*g.|h?i(j|k))' 'ij' '(0,2)(0,2)(1,2)'
M '(bc+d$|ef*g.|h?i(j|k))' 'reffgz' '(1,6)(1,6)'
M '(((((((((a)))))))))' 'a' '(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)(0,1)'
M 'multiple words' 'multiple words yeah' '(0,14)'
M '(.*)c(.*)' 'abcde' '(0,5)(0,2)(3,5)'
M 'abcd' 'abcd' '(0,4)'
M 'a(bc)d' 'abcd' '(0,4)(1,3)'
M 'a[-]?c' 'ac' '(0,3)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Qaddafi' '(0,15)(?,?)(10,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Mo''ammar Gadhafi' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Kaddafi' '(0,15)(?,?)(10,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Qadhafi' '(0,15)(?,?)(10,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Gadafi' '(0,14)(?,?)(10,11)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Mu''ammar Qadafi' '(0,15)(?,?)(11,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Moamar Gaddafi' '(0,14)(?,?)(9,11)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Mu''ammar Qadhdhafi' '(0,18)(?,?)(13,15)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Khaddafi' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Ghaddafy' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Ghadafi' '(0,15)(?,?)(11,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Ghaddafi' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muamar Kaddafi' '(0,14)(?,?)(9,11)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Quathafi' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Muammar Gheddafi' '(0,16)(?,?)(11,13)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Moammar Khadafy' '(0,15)(?,?)(11,12)'
M 'M[ou]''?am+[ae]r .*([AEae]l[\- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]' 'Moammar Qudhafi' '(0,15)(?,?)(10,12)'
M 'a+(b|c)*d+' 'aabcdd' '(0,6)(3,4)'
M '^.+$' 'vivi' '(0,4)'
M '^(.+)$' 'vivi' '(0,4)(0,4)'
M '^([^!.]+).att.com!(.+)$' 'gryphon.att.com!eby' '(0,19)(0,7)(16,19)'
M '^([^!]+!)?([^!]+)$' 'bas' '(0,3)(?,?)(0,3)'
M '^([^!]+!)?([^!]+)$' 'bar!bas' '(0,7)(0,4)(4,7)'
M '^([^!]+!)?([^!]+)$' 'foo!bas' '(0,7)(0,4)(4,7)'
M '^.+!([^!]+!)([^!]+)$' 'foo!bar!bas' '(0,11)(4,8)(8,11)'
M '((foo)|(bar))!bas' 'bar!bas' '(0,7)(0,3)(?,?)(0,3)'
M '((foo)|(bar))!bas' 'foo!bar!bas' '(4,11)(4,7)(?,?)(4,7)'
M '((foo)|(bar))!bas' 'foo!bas' '(0,7)(0,3)(0,3)'
M '((foo)|bar)!bas' 'bar!bas' '(0,7)(0,3)'
M '((foo)|bar)!bas' 'foo!bar!bas' '(4,11)(4,7)'
M '((foo)|bar)!bas' 'foo!bas' '(0,7)(0,3)(0,3)'
M '(foo|(bar))!bas' 'bar!bas' '(0,7)(0,3)(0,3)'
M '(foo|(bar))!bas' 'foo!bar!bas' '(4,11)(4,7)(4,7)'
M '(foo|(bar))!bas' 'foo!bas' '(0,7)(0,3)'
M '(foo|bar)!bas' 'bar!bas' '(0,7)(0,3)'
M '(foo|bar)!bas' 'foo!bar!bas' '(4,11)(4,7)'
M '(foo|bar)!bas' 'foo!bas' '(0,7)(0,3)'
M '^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$' 'foo!bar!bas' '(0,11)(0,11)(?,?)(?,?)(4,8)(8,11)'
M '^([^!]+!)?([^!]+)$|^.+!([^!]+!)([^!]+)$' 'bas' '(0,3)(?,?)(0,3)'
M '^([^!]+!)?([^!]+)$|^.+!([^!]+!)([^!]+)$' 'bar!bas' '(0,7)(0,4)(4,7)'
M '^([^!]+!)?([^!]+)$|^.+!([^!]+!)([^!]+)$' 'foo!bar!bas' '(0,11)(?,?)(?,?)(4,8)(8,11)'
M '^([^!]+!)?([^!]+)$|^.+!([^!]+!)([^!]+)$' 'foo!bas' '(0,7)(0,4)(4,7)'
M '^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$' 'bas' '(0,3)(0,3)(?,?)(0,3)'
M '^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$' 'bar!bas' '(0,7)(0,7)(0,4)(4,7)'
M '^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$' 'foo!bar!bas' '(0,11)(0,11)(?,?)(?,?)(4,8)(8,11)'
M '^(([^!]+!)?([^!]+)|.+!([^!]+!)([^!]+))$' 'foo!bas' '(0,7)(0,7)(0,4)(4,7)'
M '.*(/XXX).*' '/XXX' '(0,4)(0,4)'
M '.*(\\XXX).*' '\XXX' '(0,4)(0,4)'
M '\\XXX' '\XXX' '(0,4)'
M '.*(/000).*' '/000' '(0,4)(0,4)'
M '.*(\\000).*' '\000' '(0,4)(0,4)'
M '\\000' '\000' '(0,4)'
exit ''