// 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"\(\?\(DEFINE\)(?<definition>(?<=(?:[^\\](?:\\\\)+)|[^\\])\(\?\<(?<name>[\w-[0-9]]\w*?)\>(?<content>(?#internals shallow)(?:(?:(?<=(?:[^\\](?:\\\\)+)|[^\\])\[(?:(?<=(?:[^\\](?:\\\\)+)|[^\\])(?:\\\[|\\\])|[^\[\]])*(?<=(?:[^\\](?:\\\\)+)|[^\\])\])|(?:(?<=(?:[^\\](?:\\\\)+)|[^\\])\(\?(?:\!|\=|\:|\<\!|\<\=)(?#internals deep)(?:(?<=(?:[^\\](?:\\\\)+)|[^\\])(?:\\\(|\\\)|\\\[|\\\])|[^\(\)\[\]])+(?<=(?:[^\\](?:\\\\)+)|[^\\])\))|(?:(?<=(?:[^\\](?:\\\\)+)|[^\\])(?:\\\(|\\\)|\\\[|\\\])|[^\(\)\[\]]))+)(?<=(?:[^\\](?:\\\\)+)|[^\\])\))*(?<=(?:[^\\](?:\\\\)+)|[^\\])\)").unwrap();
let string = "(?(DEFINE)(?<internal_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|])(?<external_filesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|\\s])(?<external_folderesc_name_char_s>[^\\x85\\n\\r\\v\\t\\\\\\/\\:\\*\\\"\\?\\<\\>\\|\\s\\.])(?<folder_name_s>\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_folderesc_name_char_s'\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'\\g'external_folderesc_name_char_s'|\\g'external_folderesc_name_char_s')(?<extension_char_s>[a-z0-9])(?<extension_s>\\g'extension_char_s'{1,260})(?<file_name_s>(?:\\g'external_filesc_name_char_s'\\g'internal_name_char_s'{1,258}\\g'external_filesc_name_char_s'|\\g'external_filesc_name_char_s'{1,2})(?=\\.\\g'extension_s'\\Z))(?<ipv4_number_s>(?:[12]\\d\\d)|(?:\\d\\d)|(?:\\d))(?<ipv4_s>(?:\\g'ipv4_number_s'\\.){3}\\g'ipv4_number_s'(?:\\:\\d+)?)(?<named_drive_root_s>[a-z]\\:\\/)(?<file_protocol_root_s>file\\:\\/\\/\\/\\g'named_drive_root_s')(?<smb_root_s>\\/\\/)(?<hyper_text_root_s>https?\\:\\/\\/))(?#definition is complete)\\A(?!\\Z)(?<all_until_last_name>(?<root>(?<fixed_root>\\/|\\g'named_drive_root_s'|\\g'file_protocol_root_s'|(?<remote_root>\\g'smb_root_s'|\\g'hyper_text_root_s')(?:(?<ipv4>\\g'ipv4_s')(?:\\/(?!\\Z)|))?)|(?<relative_root>\\.{1,2}\\/(?:\\.\\.\\/)*))?(?<body>(?:\\g'folder_name_s'\\/)*?))(?<last_folder_or_file_name>(?<file_full_name>(?<file_short_name>\\g'file_name_s')\\.(?:(?<shortcut_extension>lnk)|(?<remote_extension>url)|(?<general_extension>\\g'extension_s'))(?!\\/))|(?:(?<folder_name>\\g'folder_name_s')\\/?))?\\Z";
// 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/