echo begin case foo { f(?=o)oo {} .* { echo fail 1 } } case foo { fo(?=x)o { echo fail 2 } .* { } } fun match { set res = $($1 $2) if [ $res != $3 ] { echo "match $1 $2: expected $3, got $res" } } fun x0 { case $1 { a(?=b). { echo yes } .* { echo no } } } match x0 aa no match x0 aaa no match x0 ab yes echo x0 fun x1 { case $1 { x(?=foo)(?=...bar).* { echo yes } .* { echo no } } } match x1 xfoobar yes match x1 xfoobar_some_more_stuff yes match x1 x___bar no match x1 xfoo___ no match x1 xfoo no echo x1 fun x2 { case $1 { (?=foo).*(?=bar).* { echo yes } .* { echo no } } } match x2 foobar yes match x2 foobarbaz yes match x2 barfoo no match x2 foobaz no match x2 foo_stuff_bar yes match x2 foo_stuff_bar_more_stuff yes echo x2 fun x3 { case $1 { (?=abc).*(?=cde).* { echo yes } .* { echo no } } } match x3 abc_cde yes match x3 abcde yes match x3 abcdef yes match x3 abde no echo x3 fun x4 { case $1 { (?=((a.)*e))(?=((a..)*e)).* { echo yes } .* { echo no } } } match x4 '' no match x4 e yes match x4 a no match x4 ab no match x4 abe no match x4 abaaabe yes match x4 aaaaaae yes match x4 aaaaaaae no match x4 aaaaaaaae no match x4 aaaaaaaaae no match x4 aaaaaaaaaae no match x4 aaaaaaaaaaae no match x4 aaaaaaaaaaaae yes echo x4 echo done