对于下面给定的字符串,如何提取出其中的变量。
变量用法:{$变量名}
如:{$LOAD_PATH}/61347d650c1a451e98b0fe8389b25f3c/{$TIMESTAMP}
应该识别出包含两个变量,分别是LOAD_PATH和TIMESTAMP。
[code="java"]String str = "{$LOAD_PATH}/61347d650c1a451e98b0fe8389b25f3c/{$TIMESTAMP}";
Pattern pattern = Pattern.compile("\{\$(\w+)\}");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}[/code]
应该还要考虑到{}的情况,否则就会把路径里面有$的给解析了
是要截取两个字符之间的数据吗(?is)(?<={$LOAD_PATH}).*?(?={$TIMESTAMP} )
[code="java"]String str = "{$LOAD_PATH}/61347d650c1a451e98b0fe8389b25f3c/{$TIMESTAMP}";
Pattern pattern = Pattern.compile("\$(\w+)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}[/code]
({\$.*?})
lbfhappy 和 bylijinnan 2位仁兄已经给出了拿到变量名称 但是 $LOAD_PATH和$TIMESTAMP 一般我们在页面中是显示了值 所以应该是这样写成这样
String str = "{2222}/61347d650c1a451e98b0fe8389b25f3c/{333}";
Pattern pattern = Pattern.compile("\{(\w+)}");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
如果需求非要拿变量名 直接copy lbfhappy 和 bylijinnan 2位仁兄的代码即可!
[code="java"]
String s = "{$LOAD_PATH}/61347d650c1a451e98b0fe8389b25f3c/{$TIMESTAMP}";
Pattern p = Pattern.compile("(?<=\{\$)[A-Z_]+(?=\})");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
[/code]