re = /^(?P<str_lit>(?P<begin_quote>(?P<single_quote>')|\")(?:(?(single_quote)\"|')|\\[\"']|\\[^\r\n ]|[^\"'\\\r\n])*?(?P=begin_quote))$/m
str = '"double-quoted string"
\'single-quoted string\'
"unexpected EOL
\'unexpected EOL
"unclosed backslash escape: \\"
"properly doubled backslash: \\\\"
"escaped \' quotes and backslash escapes \\\' are \\" \\n allowed"
"\\t\\tindented code\\r\\n"
"invalid escape \\%"
"\'"
"space is not a valid backslash escape: \\ "
"or newline either: \\
"hopefully there aren\'t any edge-cases I didn\'t think of"
"""oh, and single-line docstrings count as three string literals, so you would have to repeat the same expression multiple times to match it"""
"""and multi-line docstrings won\'t match even if you repeat the expression multiple times'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html