问题描述
对于下面给定的字符串,如何提取出其中的变量。变量用法:{$变量名}如:{$LOAD_PATH}/61347d650c1a451e98b0fe8389b25f3c/{$TIMESTAMP}应该识别出包含两个变量,分别是LOAD_PATH和TIMESTAMP。 问题补充:补充说明:这里要通过正则表达式识别出包含的变量名称?
解决方案
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));}应该还要考虑到{}的情况,否则就会把路径里面有$的给解析了
解决方案二:
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());}
解决方案三:
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位仁兄的代码即可!
解决方案四:
({$.*?})
解决方案五:
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)); }
解决方案六:
是要截取两个字符之间的数据吗(?is)(?<={$LOAD_PATH}).*?(?={$TIMESTAMP} )