iMelody Ooo wrote: > puts show_regexp("abc as;",/as$/) /as$/ means "match 'a' then 's' then end-of-line". But there is a semicolon after the 's' in the source string, so the match fails. > puts show_regexp("abc as;",/\zas/) \z matches end of string, and you've asked to match characters beyond the end of string! Your other cases are just variants of this. Try matching with /as;$/ or /as;\z/ [There are subtle differences. \z matches only the end of the string. \Z matches end of string or a newline character at the end of the string. $ matches end of string or a newline anywhere within the string] Also, don't bother with a show_regexp function while you're working this out. Just use irb to try it out interactively. $ irb --simple-prompt >> src = "abc as;" => "abc as;" >> src =~ /as$/ => nil >> src =~ /as;$/ => 4 >> [$`, $&, $'] => ["abc ", "as;", ""] >> nil means no match, 4 means matched at position 4 (counting 0 as the first character of the string) -- Posted via http://www.ruby-forum.com/.