re = /^\[(?!\^)(.*)\]: <?((?:[a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+|\.{1,2})(?:\\[^\/\\:*?"<>|]+)+(?:\.[^\/\\:*?"<>| ]+)|(?:\.{1,2}|~){0,1}(?:(?:\/|\\)(?:[a-zA-Z0-9._-])*)+|\w+:(?:\/?\/?)[^\s>]+)>?(?:\n? +["'(](.*)["')])?(?: \{(.*)\})?/m
str = '|(?:\\\\|\\/
[my label 1]: /foo/bar.jpg "My title, optional"
[my label 2]: ~/foo/bar.png "My title, optional"
[my label 1]: ~/foo/.img "My title, optional"
[my label 1]: ~/.img "My title, optional"
[my label 2]: /foo
[my label 3]: https://fsf.org (The free software foundation)
[my label 3]: (The free software foundation)
[my label 4]: /bar#special \'A title in single quotes\'
[my label 1]: ./foo/bar.html "My title, optional"
[my label 2]: ../foo/bar.html
[my label 1]: ./foo/bar.html "My title, optional"
[my label 3]: https://fsf.org (The free software foundation)
[my label 4]: /foo/bar.html#special \'A title in single quotes\'
[my label 5]: <http://foo.bar.baz>
[my label 3]: https://fsf.org
"The free software foundation"
[my label 5]: <http://foo.bar.baz>
[my label 1]: ..\\foo\\bar.html "My title, optional"
[my label 1]: C:\\foo\\bar.html "My title, optional"
[my label 1]: .\\foo\\bar.html "My title, optional"
[my label 1]: \\\\unc.server.tld.co\\path\\to\\file.ext "My title, optional"
[my label 2]: C:\\foo
[my label 3]: https://fsf.org (The free software foundation)
[my label 2]: /foo
[my label 3]: https://fsf.org (The free software foundation)
(?:\\.{1,2}|~){0,1}(?:(?:\\/|\\\\)(?:[a-zA-Z0-9._ -])*)+
^\\[(?!\\^)(.*)\\]: <?((?:[a-zA-Z]\\:|\\\\\\\\[^\\/\\\\:*?"<>|]+\\\\[^\\/\\\\:*?"<>|]+|\\.{1,2})(?:\\\\[^\\/\\\\:*?"<>|]+)+(?:\\.[^\\/\\\\:*?"<>| ]+)|(?:\\.{1,2}|~){0,1}(?:(?:\\/|\\\\)(?:[a-zA-Z0-9._ -])*)+|\\w+:(?:\\/?\\/?)[^\\s]+)>?(?:\\n? +["\'(](.*)["\')])?(?: \\{(.*)\\})?'
# 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