// include the latest version of the regex crate in your Cargo.toml
extern crate regex;
use regex::Regex;
fn main() {
let regex = Regex::new(r#"(?m)^\[(?!\^)(.*)\]: <?((?:[a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+|\.{1,2})(?:\\[^\/\\:*?"<>|]+)+(?:\.[^\/\\:*?"<>| ]+)|(?:\.{1,2}|~){0,1}(?:(?:\/|\\)(?:[a-zA-Z0-9._-])*)+|\w+:(?:\/?\/?)[^\s>]+)>?(?:\n? +["'(](.*)["')])?(?: \{(.*)\})?"#).unwrap();
let string = "|(?:\\\\|\\/
[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? +[\"'(](.*)[\"')])?(?: \\{(.*)\\})?";
// result will be an iterator over tuples containing the start and end indices for each match in the string
let result = regex.captures_iter(string);
for mat in result {
println!("{:?}", mat);
}
}
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 Rust, please visit: https://docs.rs/regex/latest/regex/