diff --git a/src/parsers.rs b/src/parsers.rs index d21bb56..ab1fd89 100644 --- a/src/parsers.rs +++ b/src/parsers.rs @@ -1,14 +1,10 @@ -use std::sync::LazyLock; - -static PROXY_REGEX: LazyLock = LazyLock::new(|| { - let pattern = r"(?:^|[^0-9A-Za-z])(?:(?Phttps?|socks[45]):\/\/)?(?:(?P[0-9A-Za-z]{1,64}):(?P[0-9A-Za-z]{1,64})@)?(?P(?P[A-Za-z][\-\.A-Za-z]{0,251}[A-Za-z]|[A-Za-z]|(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:\.(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})(?:\/1[6-9]|2[0-9]|3[0-2])?):(?P[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:(?P[^0-9A-Za-z])|$)"; - regex::Regex::new(pattern).unwrap() -}); - pub fn proxy_captures(text: &str) -> impl Iterator> { let mut start = 0; std::iter::from_fn(move || { - let captures = PROXY_REGEX.captures_at(text, start)?; + let pattern = regex::regex!( + r"(?:^|[^0-9A-Za-z])(?:(?Phttps?|socks[45]):\/\/)?(?:(?P[0-9A-Za-z]{1,64}):(?P[0-9A-Za-z]{1,64})@)?(?P(?P[A-Za-z][\-\.A-Za-z]{0,251}[A-Za-z]|[A-Za-z]|(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:\.(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3})(?:\/1[6-9]|2[0-9]|3[0-2])?):(?P[0-9]|[1-9][0-9]{1,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?:(?P[^0-9A-Za-z])|$)" + ); + let captures = pattern.captures_at(text, start)?; let whole_match = captures.get(0)?; start = captures .name("trailing")