对于下面的代码,我尝试输出输入单词,后跟随机字符串。第一个函数可以编译,但我不想要它,因为它不使用随机字符串。第二个函数会产生编译器错误。
我如何解决它?
use regex::Regex;
fn main() {
let cd="rust";
ok_but_i_dont_want_it(cd);
compiler_err(cd);
}
fn ok_but_i_dont_want_it(cd:&str){
let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(" rust ","${ident}_{}");
println!("{}",cd);
}
fn compiler_err(cd:&str){
let random_str="j93bg8";
let reg_idnt=Regex::new(r"(?P<ident>[_A-Za-z]{1,}[_A-Za-z0-9]{0,})").unwrap();
let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
println!("{}",cd);
}
error: there is no argument named `ident`
--> src/main.rs:18:47
|
18 | let cd=reg_idnt.replace_all(cd,format!("${ident}_{}",random_str));
| ^^^^^^^
error[E0277]: expected a `FnMut<(®ex::Captures<'_>,)>` closure, found `String`
如果你不想format!
来处理{ident}
, 你可以escape https://doc.rust-lang.org/std/fmt/index.html#escaping通过将大括号加倍来实现:
reg_idnt.replace_all(cd, format!("${{ident}}_{}", random_str));
这会导致format!
忽略它,结果将是"{ident}_j93bg8"
它被传递给replace_all
.
你缺少一个.as_str()
通过String
from format!
as a &str
为了满足Replacer
.
format!("${{ident}}_{}", random_str).as_str()
看到它运行在
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)