Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用regexs模式(JAVA)获取两个表达式之间的所有子字符串_Java_Regex_String_Arraylist - Fatal编程技术网

使用regexs模式(JAVA)获取两个表达式之间的所有子字符串

使用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("\\$\\{(

我有以下字符串(str):

我在java中使用什么正则表达式模式来获取“${”和“}”之间的所有子字符串并将它们保存在arraylist中, 因此,结果将是一个具有以下值的数组列表:“name”、“family”、“child”、“fname”

您可以使用
“\\$\{(\\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("/")));