Comment Comment by neilk In my experience `$` does reliably mean end of string for regular expressions, unless you specifically ask for "multiline" mode.Ruby seems to be in multiline mode all the time? $ python -c 'import re; print "yes" if re.match(r"^[a-z ]+$", "foobar") else "no"' yes $ python -c 'import re; print "yes" if re.match(r"^[a-z ]+$", "foo\nbar") else "no"' no $ python -c 'import re; print "yes" if re.match(r"^[a-z ]+$", "foo\nbar", re.M) else "no"' yes $ perl -le 'print "foobar" =~ /^[a-z ]+$/ ? "yes" : "no"' yes $ perl -le 'print "foo\nbar" =~ /^[a-z ]+$/ ? "yes" : "no"' no $ perl -le 'print "foo\nbar" =~ /^[a-z ]+$/m ? "yes" : "no"' yes $ node -e 'console.log(/^[a-z ]+$/.test("foobar") ? "yes" : "no")' yes $ node -e 'console.log(/^[a-z ]+$/.test("foo\nbar") ? "yes" : "no")' no $ node -e 'console.log(/^[a-z ]+$/m.test("foo\nbar") ? "yes" : "no")' yes $ ruby -e 'if "foobar" =~ /^[0-9a-z ]+$/i then puts "yes" else puts "no" end' yes $ ruby -e 'if "foo\nbar" =~ /^[0-9a-z ]+$/i then puts "yes" else puts "no" end' yes EDIT: this is documented behavior for Ruby. What other languages call multiline mode is the default; you're supposed to use \A and \Z instead. They do have an `/m` but it only affects the interpretation of `.`https://docs.ruby-lang.org/en/master/Regexp.html#class-Regex... parent neilk 2 years ago
Ruby seems to be in multiline mode all the time?
EDIT: this is documented behavior for Ruby. What other languages call multiline mode is the default; you're supposed to use \A and \Z instead. They do have an `/m` but it only affects the interpretation of `.`https://docs.ruby-lang.org/en/master/Regexp.html#class-Regex...