46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
use regex::{Captures, Regex, Replacer};
|
|
use std::io::stdin;
|
|
|
|
/*
|
|
"grfg123@rknzcyr.bet"
|
|
"grfg456@rknzcyr.bet"
|
|
"grfg456@rknzcyr1.bet"
|
|
*/
|
|
|
|
struct MailScrambler;
|
|
|
|
impl Replacer for MailScrambler {
|
|
fn replace_append(&mut self, caps: &Captures<'_>, dst: &mut String) {
|
|
for c in caps[0].chars() {
|
|
if c.is_ascii() {
|
|
// do rot13 for ascii alphanumeric characters
|
|
let mut c = c as u8;
|
|
if c.is_ascii_lowercase() {
|
|
c = (c - b'a' + 13) % 26 + b'a';
|
|
} else if c.is_ascii_uppercase() {
|
|
c = (c - b'A' + 13) % 26 + b'A';
|
|
}
|
|
dst.push(unsafe { char::from_u32_unchecked(c as u32) });
|
|
} else {
|
|
dst.push(c);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let re =
|
|
Regex::new(r#""([[[:ascii:]]&&[^"\s\[\]\\]]*?@[[[:ascii:]]&&[^"\s]\[\]\\]*)""#).unwrap();
|
|
|
|
let mut line = String::new();
|
|
|
|
while let Ok(n) = stdin().read_line(&mut line) {
|
|
if n == 0 {
|
|
break;
|
|
}
|
|
let result = re.replace(&line, MailScrambler);
|
|
print!("{}", result);
|
|
line.clear();
|
|
}
|
|
}
|