由于某些地方要用${变量名}来在一段文字中代表变量,然后在具体使用的时候替换变量。 例如短信发送的短信模板。
1了解正则
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
首先你的对正则有一定的了解。
(?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)“能匹配"Windows2000"中的"Windows”,但不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
---|---|
(?<=pattern) | 反向(look behind)肯定预查,与正向肯定预查类似,只是方向相反。例如,"`(?<=95 |
2开始使用
(?<=\$\{)(.*?)(?=\})
这就是查找的正则
(?<=\$\{)
这是反向(look behind)肯定预查 意思就是匹配${ 开头的字符串
(.*?)
这是匹配所有字符串 且最小匹配
(?=\})
正向肯定预查
java 代码
public static void main(String[] args) {
String reStr = "(?<=\\$\\{)(.*?)(?=\\})";
String findText = "你好,尊敬的${name}客户,你预约的《${course}》即将开课。";
//这里调用 糊涂工具库
ArrayList<String> all = ReUtil.findAll(reStr, findText, 0, new ArrayList<>());
System.out.println("查询到的变量:" + all.toString());
String name = "张三";
String course = "张三来学java";
String res = findText.replaceFirst("\\$\\{name}", name );
res = res.replaceFirst("\\$\\{course}", course );
System.out.println(res);
}