Files
proxy-scraper-checker/src/parsers.rs
T
2025-12-24 11:24:11 +03:00

23 lines
1.2 KiB
Rust

use std::sync::LazyLock;
pub static PROXY_REGEX: LazyLock<fancy_regex::Regex> = LazyLock::new(|| {
let pattern = r"(?:^|[^0-9A-Za-z])(?:(?P<protocol>https?|socks[45]):\/\/)?(?:(?P<username>[0-9A-Za-z]{1,64}):(?P<password>[0-9A-Za-z]{1,64})@)?(?P<host>[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}):(?P<port>[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])(?=[^0-9A-Za-z]|$)";
fancy_regex::RegexBuilder::new(pattern)
.backtrack_limit(usize::MAX)
.build()
.unwrap()
});
static IPV4_REGEX: LazyLock<fancy_regex::Regex> = LazyLock::new(|| {
let pattern = r"^\s*(?P<host>(?:[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})(?::(?:[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]))?\s*$";
fancy_regex::Regex::new(pattern).unwrap()
});
pub fn parse_ipv4(s: &str) -> Option<compact_str::CompactString> {
if let Ok(Some(captures)) = IPV4_REGEX.captures(s) {
captures.name("host").map(|capture| capture.as_str().into())
} else {
None
}
}