1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//! A parser and representation of regular expressions.

use regex_syntax::hir::Hir;
use regex_syntax::{self, Error, Parser};

#[cfg(test)]
mod test;

pub type Regex = Hir;
pub type RegexError = Box<Error>;

/// Convert a string literal into a parsed regular expression.
pub fn parse_literal(s: &str) -> Regex {
    match parse_regex(&regex_syntax::escape(s)) {
        Ok(v) => v,
        Err(_) => panic!("failed to parse literal regular expression"),
    }
}

/// Parse a regular expression like `a+` etc.
pub fn parse_regex(s: &str) -> Result<Regex, RegexError> {
    let expr = Parser::new().parse(s)?;
    Ok(expr)
}