【问题标题】:Getting all Substrings between two expressions using regexs pattern (JAVA)使用正则表达式模式(JAVA)获取两个表达式之间的所有子字符串
【发布时间】:2023-04-01 18:07:01
【问题描述】:

我有以下字符串(str):

 String  str="${name}/${family}/${child}/${fname}"

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

【问题讨论】:

  • 正则表达式匹配器不会返回这样的数组。您也许可以想出一个可以与split() 一起使用的复杂正则表达式,但这并不值得。编写一个正则表达式来查找 one 子字符串,然后在循环中使用find() 方法并构建一个ArrayList。简单、易读、不易出错。
  • @ajb 我认为意图是循环。我不明白你为什么会以其他方式推断。
  • System.out.println(Arrays.asList(str.replaceAll("[\\$\\{\\}]", "").split("/")));
  • @ElliottFrisch 嘿,这是作弊! :)
  • 使用这个正则表达式:"\\$\\{(.*?)\\}"。查看docs.oracle.com/javase/tutorial/essential/regex/matcher.html 以了解如何在循环中使用匹配器。您可以使用matcher.group(1) 检索“捕获组”,这将是{} 之间的字符。

标签: java regex string arraylist


【解决方案1】:

您可以编译 Pattern"\\$\\{(\\w+)\\}" 然后循环构建 List 之类的,

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);

,就像我在评论中所说的那样,只有一行

System.out.println(Arrays.asList(str.replaceAll("[\\$\\{\\}]‌​", "").split("/")));

【讨论】:

  • 我很遗憾我只能投票一次。那解决方案:)
猜你喜欢
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多