#[macro_export]
macro_rules! remove_matches {
( $string:expr; $( $pat:expr ),* ) => ({
let mut new_string: String = String::new();
let mut to_skip = 0;
let mut next_start = 0;
'outer: for i in 0..$string.len() {
if to_skip > 0 {
to_skip -= 1;
continue 'outer
}
$(
unsafe {
let pat_len = $pat.len();
if i + pat_len > $string.len() { break 'outer }
if *$pat == *$string.get_unchecked(i..i + pat_len) {
new_string.push_str( $string.get_unchecked(next_start..i));
next_start = i + pat_len;
to_skip += pat_len - 1;
}
}
)*
}
unsafe {
new_string.push_str($string.get_unchecked(next_start..));
}
new_string
});
}