使用regexs模式(JAVA)获取两个表达式之间的所有子字符串
我有以下字符串(str): 我在java中使用什么正则表达式模式来获取“${”和“}”之间的所有子字符串并将它们保存在arraylist中, 因此,结果将是一个具有以下值的数组列表:“name”、“family”、“child”、“fname”您可以使用使用regexs模式(JAVA)获取两个表达式之间的所有子字符串,java,regex,string,arraylist,Java,Regex,String,Arraylist,我有以下字符串(str): 我在java中使用什么正则表达式模式来获取“${”和“}”之间的所有子字符串并将它们保存在arraylist中, 因此,结果将是一个具有以下值的数组列表:“name”、“family”、“child”、“fname”您可以使用“\\$\{(\\w+\\}”编译一个模式,然后循环构建一个列表 String str = "${name}/${family}/${child}/${fname}"; Pattern pat = Pattern.compile("\\$\\{(
“\\$\{(\\w+\\}”
编译一个模式
,然后循环构建一个列表
String str = "${name}/${family}/${child}/${fname}";
Pattern pat = Pattern.compile("\\$\\{(\\w+)\\}");
Matcher mat = pat.matcher(str);
List<String> al = new ArrayList<>();
while (mat.find()) {
al.add(mat.group(1));
}
System.out.println(al);
您可以使用“\\$\\{(\\w+\\}”
编译模式
,然后循环构建列表
String str = "${name}/${family}/${child}/${fname}";
Pattern pat = Pattern.compile("\\$\\{(\\w+)\\}");
Matcher mat = pat.matcher(str);
List<String> al = new ArrayList<>();
while (mat.find()) {
al.add(mat.group(1));
}
System.out.println(al);
正则表达式匹配器不会返回这样的数组。您可能会想出一个复杂的正则表达式,可以与split()
一起使用,但这并不值得。编写一个正则表达式来查找一个子字符串,然后在循环中使用find()
方法并构建一个ArrayList
。简单易读,不易出错。@ajb我认为目的是循环。我不明白你为什么会做出相反的推断。System.out.println(Arrays.asList(str.replaceAll(“[\\$\\{\\}]”,“).split(“/”)代码>@ElliottFrisch嘿,这是作弊!:)使用此正则表达式:“\\$\\{(.*?\\}”
。查看以了解如何在循环中使用匹配器。您可以使用matcher.group(1)
检索“捕获组”,它是{
和}
之间的字符。正则表达式匹配器不会返回这样的数组。您可能会想出一个复杂的正则表达式,可以与split()
一起使用,但这并不值得。编写一个正则表达式来查找一个子字符串,然后在循环中使用find()
方法并构建一个ArrayList
。简单易读,不易出错。@ajb我认为目的是循环。我不明白你为什么会做出相反的推断。System.out.println(Arrays.asList(str.replaceAll(“[\\$\\{\\}]”,“).split(“/”)代码>@ElliottFrisch嘿,这是作弊!:)使用此正则表达式:“\\$\\{(.*?\\}”
。查看以了解如何在循环中使用匹配器。您可以使用matcher.group(1)
检索“捕获组”,该组将是{
和}
之间的字符。我很遗憾,我只能对其进行一次升级。这或解决方案:)我很难过,我只能投这一次。这或解决方案:)
System.out.println(Arrays.asList(str.replaceAll("[\\$\\{\\}]", "").split("/")));