一尘不染

在Java中提取两个字符串之间的字符串

java

我尝试获取<%=和%>之间的字符串,这是我的实现:

String str = "ZZZZL <%= dsn %> AFFF <%= AFG %>";
Pattern pattern = Pattern.compile("<%=(.*?)%>");
String[] result = pattern.split(str);
System.out.println(Arrays.toString(result));

它返回

[ZZZZL ,  AFFF ]

但我的期望是:

[ dsn , AFG ]

我在哪里错了以及如何纠正它?


阅读 367

收藏
2020-09-08

共1个答案

一尘不染

您的模式很好。但是,您不应该split()轻信它,应该find()这样做。以下代码提供了您正在寻找的输出:

String str = "ZZZZL <%= dsn %> AFFF <%= AFG %>";
Pattern pattern = Pattern.compile("<%=(.*?)%>", Pattern.DOTALL);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group(1));
}
2020-09-08