Skip to content

Commit

Permalink
doc: add a doctest to demonstrate a separately-compiled regex set
Browse files Browse the repository at this point in the history
  • Loading branch information
cosmicexplorer committed May 20, 2022
1 parent 88a2a62 commit 26e4efd
Showing 1 changed file with 29 additions and 4 deletions.
33 changes: 29 additions & 4 deletions src/re_set.rs
Expand Up @@ -62,10 +62,35 @@ $(#[$doc_regexset_example])*
/// As with the main `Regex` type, it is cheaper to ask (1) instead of (2)
/// since the matching engines can stop after the first match is found.
///
/// Other features like finding the location of successive matches or their
/// sub-captures aren't supported. If you need this functionality, the
/// recommended approach is to compile each regex in the set independently and
/// selectively match them based on which regexes in the set matched.
/// Other features like finding match locations or capture groups
/// aren't supported. If you need this functionality, the
/// recommended approach is to compile each pattern in the set independently and
/// scan the exact same input a second time with those independently compiled
/// patterns:
/// ```rust
/// # use regex::{Regex, RegexSet};
/// let patterns = ["foo", "bar"];
/// // Both patterns will match different ranges of this string.
/// let text = "barfoo";
///
/// // Compile a set matching any of our patterns.
/// let set = RegexSet::new(&patterns).unwrap();
/// // Compile each pattern independently.
/// let regexen: Vec<_> = patterns.iter().map(|pat| Regex::new(pat).unwrap()).collect();
///
/// // Match against the whole set first and identify the individual matching patterns.
/// let matches: Vec<&str> = set.matches(text).into_iter()
/// // Dereference the match index to get the corresponding compiled pattern.
/// .map(|match_idx| &regexen[match_idx])
/// // To get match locations or any other info, we then have to search
/// // the exact same text again, using our separately-compiled pattern.
/// .map(|pat| pat.find(text).unwrap().as_str())
/// .collect();
///
/// // Matches arrive in the order the constituent patterns were declared,
/// // not the order they appear in the input.
/// assert_eq!(["foo", "bar"].as_ref(), &matches);
/// ```
///
/// # Performance
///
Expand Down

0 comments on commit 26e4efd

Please sign in to comment.