perl-regex 0.13.3

Regex parsing and validation helpers for Perl syntax
Documentation
pub(crate) struct RegexCursor<'a> {
    bytes: &'a [u8],
    pos: usize,
}

impl<'a> RegexCursor<'a> {
    pub(crate) fn new(pattern: &'a str) -> Self {
        Self { bytes: pattern.as_bytes(), pos: 0 }
    }

    pub(crate) fn current(&self) -> Option<u8> {
        self.bytes.get(self.pos).copied()
    }

    pub(crate) fn peek(&self, offset: usize) -> Option<u8> {
        self.bytes.get(self.pos + offset).copied()
    }

    pub(crate) fn bump(&mut self) {
        self.pos += 1;
    }

    pub(crate) fn skip_escape(&mut self) -> bool {
        if self.current() == Some(b'\\') {
            self.pos += 2;
            return true;
        }
        false
    }

    pub(crate) fn skip_char_class(&mut self) -> bool {
        if self.current() != Some(b'[') {
            return false;
        }
        self.pos += 1;
        while let Some(ch) = self.current() {
            if ch == b'\\' {
                self.pos += 2;
            } else if ch == b']' {
                self.pos += 1;
                break;
            } else {
                self.pos += 1;
            }
        }
        true
    }
}