pub(crate) fn strip_leading_inline_flags(pattern: &str) -> &str {
if !pattern.starts_with("(?") {
return pattern;
}
let bytes = pattern.as_bytes();
if bytes.len() < 4 || bytes[0] != b'(' || bytes[1] != b'?' {
return pattern;
}
let mut i = 2;
while i < bytes.len() && matches!(bytes[i], b'i' | b'm' | b's' | b'x' | b'u' | b'U' | b'-') {
i += 1;
}
if i < bytes.len() && bytes[i] == b')' {
&pattern[i + 1..]
} else {
pattern
}
}
pub(crate) fn strip_leading_zero_width_assertions(pattern: &str) -> &str {
let mut p = pattern;
loop {
let next = p
.strip_prefix('^')
.or_else(|| p.strip_prefix(r"\A"))
.or_else(|| p.strip_prefix(r"\b"))
.or_else(|| p.strip_prefix(r"\B"));
match next {
Some(rest) => p = rest,
None => return p,
}
}
}