regexp/percent_r_and_conditions_parens.rb
tests/_examples/regexp/percent_r_and_conditions_parens.rb in the metorex repository.
# A paired delimiter nests, so a group written inside one does not close the
# literal, and an unescaped slash is written back escaped.
puts(%r( () [c]{1} ).source)
puts(%r[/].to_s)
# A letter, a space, or an unclosed delimiter opens no literal at all.
["%ra foo a", "%r !foo!", "%r{ foo {"].each do |source|
begin
eval(source)
puts("no error for #{source}")
rescue SyntaxError
puts("SyntaxError")
end
end
# A call to a named group reads its pattern again, and the group takes what
# that read.
named_call = /(?<foo>foo.)bar\g<foo>/
puts(named_call.match("foo1barfoo2").to_a.inspect)
# A pattern written on its own as a condition matches against the last line
# read, and says so.
$_ = "hay"
puts((true if /hay/).inspect)
$_ = "straw"
puts((true if /hay/).inspect)
Output:
() [c]{1}
(?-mix:\/)
SyntaxError
SyntaxError
SyntaxError
["foo1barfoo2", "foo2"]
true
nil