Java正则表达式捕获EOL,正则表达式流

时间:2016-02-08 17:19:15

标签: java regex eol

我正在尝试通过流(Reader)实现正则表达式。我正在使用以下方法:

  1. 读取N个字符缓冲区
  2. 在此缓冲区上调用matcher.find()
  3. 从头开始修剪到matcher.end()位置并将缓冲区附加到N个字符长度
  4. 循环
  5. regex ^(。*)$存在问题(它是用户数据,无法更改)。匹配器没有捕获行结尾,因此matcher.end()返回\ n char之前的最后一个符号而不是\ n本身。然后该程序循环空字符串。例如。我们输入了“ABC \ nCDE”

    • matcher捕获ABC,matcher.end()返回2
    • substring(2)返回“\ nCDE”
    • matcher捕获空字符串和循环

    是否有任何方法可以将EOL字符包含在捕获组中?或者有Java的正则表达式实现与流一起工作?

    P.S。有一个解决方案,但它非常难看,我不会实现它:

    String text = "ABC\r\nDEF\r\nGHI\r\n";
    Pattern pattern = Pattern.compile("^(.*)$", Pattern.MULTILINE);
    boolean first = true;
    Matcher matcher = pattern.matcher(text);
    while (matcher.find(first ? 0 : 1)) {
        System.out.println(matcher.group());
        text = text.substring(matcher.end() - 1);
        matcher.reset(text);
        first = false;
    }
    

0 个答案:

没有答案