java.util.regex.Matcher无法在从Apache IOUtils获得的字符串中找到任何内容



我有一个将输入流转换为String的代码片段。然后使用java.util.regex.Matcher查找字符串中的内容。

下面的适用于我:

StringBuilder sb = new StringBuilder();
InputStream ins; // the InputStream data
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
br.lines().forEach(sb::append);
br.close();
String data = sb.toString();
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)");
Matcher matcher = pattern.matcher(data);
if (matcher.find())
String searchedStr = matcher.group(1); // I find a match here

但是如果我尝试用Apache IOUtils替换BufferedReader,我找不到任何与相同字符串的匹配。

InputStream ins; // the InputStream data
String data = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)");
Matcher matcher = pattern.matcher(data);
if (matcher.find())
String searchedStr = matcher.group(1); // I cannot find a match here

我试过用其他"标准字符集";除了UTF-8,但没有一个成功。

我无法理解这里有什么不同,会导致ioutil不匹配。有人能帮我一下吗?

第一个代码删除了行煞车,第二个代码没有。

所以你应该定义多行模式匹配:

  1. 在模式中(以标志s=dotall, m=multiline开始)
Pattern pattern = Pattern.compile("(?sm).*My_PATTERN:(.*)");
  1. 模式v2
Pattern pattern = Pattern.compile("[\s\S]*My_PATTERN:([\s\S]*)");
  1. With flags
Pattern pattern = Pattern.compile(".*My_PATTERN:(.*)", MULTILINE|DOTALL);

所有匹配组值中的line brakes。
或者删除换行符,例如:

data = data.replaceAll("\r?\n", "");

看:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html编译(以% 20 int)

https://docs.oracle.com/javase/tutorial/essential/regex/pattern.html

相关内容

最新更新