1 macro_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 12 replace!(first, replace, r"[0-9]", "age: 26", t!("Z"), "age: Z6"); 13 replace!(plus, replace, r"[0-9]+", "age: 26", t!("Z"), "age: Z"); 14 replace!(all, replace_all, r"[0-9]", "age: 26", t!("Z"), "age: ZZ"); 15 replace!( 16 groups, 17 replace, 18 r"(?-u)(\S+)\s+(\S+)", 19 "w1 w2", 20 t!("$2 $1"), 21 "w2 w1" 22 ); 23 replace!( 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"); 33 replace!( 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 ); 41 replace!( 42 trim, 43 replace_all, 44 "^[ \t]+|[ \t]+$", 45 " \t trim me\t \t", 46 t!(""), 47 "trim me" 48 ); 49 replace!(number_hypen, replace, r"(.)(.)", "ab", t!("$1-$2"), "a-b"); 50 // replace!(number_underscore, replace, r"(.)(.)", "ab", t!("$1_$2"), "a_b"); 51 replace!( 52 simple_expand, 53 replace_all, 54 r"(?-u)(\w) (\w)", 55 "a b", 56 t!("$2 $1"), 57 "b a" 58 ); 59 replace!( 60 literal_dollar1, 61 replace_all, 62 r"(?-u)(\w+) (\w+)", 63 "a b", 64 t!("$$1"), 65 "$1" 66 ); 67 replace!( 68 literal_dollar2, 69 replace_all, 70 r"(?-u)(\w+) (\w+)", 71 "a b", 72 t!("$2 $$c $1"), 73 "b $c a" 74 ); 75 replace!( 76 no_expand1, 77 replace, 78 r"(?-u)(\S+)\s+(\S+)", 79 "w1 w2", 80 no_expand!("$2 $1"), 81 "$2 $1" 82 ); 83 replace!( 84 no_expand2, 85 replace, 86 r"(?-u)(\S+)\s+(\S+)", 87 "w1 w2", 88 no_expand!("$$1"), 89 "$$1" 90 ); 91 use_!(Captures); 92 replace!( 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 ); 102 replace!( 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 112 replace!( 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 122 replace!(single_empty_match, replace, r"^", "bar", t!("foo"), "foobar"); 123 124 // See https://github.com/rust-lang/regex/issues/399 125 replace!( 126 capture_longest_possible_name, 127 replace_all, 128 r"(.)", 129 "b", 130 t!("${1}a $1a"), 131 "ba " 132 ); 133