1macro_rules! replace( 2 ($name:ident, $which:ident, $re:expr, 3 $search:expr, $replace:expr, $result:expr) => ( 4 #[test] 5 fn $name() { 6 let re = regex!($re); 7 assert_eq!(re.$which(text!($search), $replace), text!($result)); 8 } 9 ); 10); 11 12replace!(first, replace, r"[0-9]", "age: 26", t!("Z"), "age: Z6"); 13replace!(plus, replace, r"[0-9]+", "age: 26", t!("Z"), "age: Z"); 14replace!(all, replace_all, r"[0-9]", "age: 26", t!("Z"), "age: ZZ"); 15replace!( 16 groups, 17 replace, 18 r"(?-u)(\S+)\s+(\S+)", 19 "w1 w2", 20 t!("$2 $1"), 21 "w2 w1" 22); 23replace!( 24 double_dollar, 25 replace, 26 r"(?-u)(\S+)\s+(\S+)", 27 "w1 w2", 28 t!("$2 $$1"), 29 "w2 $1" 30); 31// replace!(adjacent_index, replace, 32// r"([^aeiouy])ies$", "skies", t!("$1y"), "sky"); 33replace!( 34 named, 35 replace_all, 36 r"(?-u)(?P<first>\S+)\s+(?P<last>\S+)(?P<space>\s*)", 37 "w1 w2 w3 w4", 38 t!("$last $first$space"), 39 "w2 w1 w4 w3" 40); 41replace!( 42 trim, 43 replace_all, 44 "^[ \t]+|[ \t]+$", 45 " \t trim me\t \t", 46 t!(""), 47 "trim me" 48); 49replace!(number_hypen, replace, r"(.)(.)", "ab", t!("$1-$2"), "a-b"); 50// replace!(number_underscore, replace, r"(.)(.)", "ab", t!("$1_$2"), "a_b"); 51replace!( 52 simple_expand, 53 replace_all, 54 r"(?-u)(\w) (\w)", 55 "a b", 56 t!("$2 $1"), 57 "b a" 58); 59replace!( 60 literal_dollar1, 61 replace_all, 62 r"(?-u)(\w+) (\w+)", 63 "a b", 64 t!("$$1"), 65 "$1" 66); 67replace!( 68 literal_dollar2, 69 replace_all, 70 r"(?-u)(\w+) (\w+)", 71 "a b", 72 t!("$2 $$c $1"), 73 "b $c a" 74); 75replace!( 76 no_expand1, 77 replace, 78 r"(?-u)(\S+)\s+(\S+)", 79 "w1 w2", 80 no_expand!("$2 $1"), 81 "$2 $1" 82); 83replace!( 84 no_expand2, 85 replace, 86 r"(?-u)(\S+)\s+(\S+)", 87 "w1 w2", 88 no_expand!("$$1"), 89 "$$1" 90); 91use_!(Captures); 92replace!( 93 closure_returning_reference, 94 replace, 95 r"([0-9]+)", 96 "age: 26", 97 |captures: &Captures<'_>| { 98 match_text!(captures.get(1).unwrap())[0..1].to_owned() 99 }, 100 "age: 2" 101); 102replace!( 103 closure_returning_value, 104 replace, 105 r"[0-9]+", 106 "age: 26", 107 |_captures: &Captures<'_>| t!("Z").to_owned(), 108 "age: Z" 109); 110 111// See https://github.com/rust-lang/regex/issues/314 112replace!( 113 match_at_start_replace_with_empty, 114 replace_all, 115 r"foo", 116 "foobar", 117 t!(""), 118 "bar" 119); 120 121// See https://github.com/rust-lang/regex/issues/393 122replace!(single_empty_match, replace, r"^", "bar", t!("foo"), "foobar"); 123 124// See https://github.com/rust-lang/regex/issues/399 125replace!( 126 capture_longest_possible_name, 127 replace_all, 128 r"(.)", 129 "b", 130 t!("${1}a $1a"), 131 "ba " 132); 133 134replace!( 135 impl_string, 136 replace, 137 r"[0-9]", 138 "age: 26", 139 t!("Z".to_string()), 140 "age: Z6" 141); 142replace!( 143 impl_string_ref, 144 replace, 145 r"[0-9]", 146 "age: 26", 147 t!(&"Z".to_string()), 148 "age: Z6" 149); 150replace!( 151 impl_cow_str_borrowed, 152 replace, 153 r"[0-9]", 154 "age: 26", 155 t!(std::borrow::Cow::<'_, str>::Borrowed("Z")), 156 "age: Z6" 157); 158replace!( 159 impl_cow_str_borrowed_ref, 160 replace, 161 r"[0-9]", 162 "age: 26", 163 t!(&std::borrow::Cow::<'_, str>::Borrowed("Z")), 164 "age: Z6" 165); 166replace!( 167 impl_cow_str_owned, 168 replace, 169 r"[0-9]", 170 "age: 26", 171 t!(std::borrow::Cow::<'_, str>::Owned("Z".to_string())), 172 "age: Z6" 173); 174replace!( 175 impl_cow_str_owned_ref, 176 replace, 177 r"[0-9]", 178 "age: 26", 179 t!(&std::borrow::Cow::<'_, str>::Owned("Z".to_string())), 180 "age: Z6" 181); 182 183replace!( 184 impl_vec_u8, 185 replace, 186 r"[0-9]", 187 "age: 26", 188 bytes!(vec![b'Z']), 189 "age: Z6" 190); 191replace!( 192 impl_vec_u8_ref, 193 replace, 194 r"[0-9]", 195 "age: 26", 196 bytes!(&vec![b'Z']), 197 "age: Z6" 198); 199replace!( 200 impl_cow_slice_borrowed, 201 replace, 202 r"[0-9]", 203 "age: 26", 204 bytes!(std::borrow::Cow::<'_, [u8]>::Borrowed(&[b'Z'])), 205 "age: Z6" 206); 207replace!( 208 impl_cow_slice_borrowed_ref, 209 replace, 210 r"[0-9]", 211 "age: 26", 212 bytes!(&std::borrow::Cow::<'_, [u8]>::Borrowed(&[b'Z'])), 213 "age: Z6" 214); 215replace!( 216 impl_cow_slice_owned, 217 replace, 218 r"[0-9]", 219 "age: 26", 220 bytes!(std::borrow::Cow::<'_, [u8]>::Owned(vec![b'Z'])), 221 "age: Z6" 222); 223replace!( 224 impl_cow_slice_owned_ref, 225 replace, 226 r"[0-9]", 227 "age: 26", 228 bytes!(&std::borrow::Cow::<'_, [u8]>::Owned(vec![b'Z'])), 229 "age: Z6" 230); 231 232#[test] 233fn replacen_no_captures() { 234 let re = regex!(r"[0-9]"); 235 assert_eq!( 236 re.replacen(text!("age: 1234"), 2, t!("Z")), 237 text!("age: ZZ34") 238 ); 239} 240 241#[test] 242fn replacen_with_captures() { 243 let re = regex!(r"([0-9])"); 244 assert_eq!( 245 re.replacen(text!("age: 1234"), 2, t!("${1}Z")), 246 text!("age: 1Z2Z34") 247 ); 248} 249