【问题标题】:Why doesn't Pattern.MULTILINE match new lines in java regex为什么 Pattern.MULTILINE 不匹配 java regex 中的新行
【发布时间】:2015-02-24 08:49:25
【问题描述】:

enter code here我不明白如何用简单的正则表达式捕获多行:

Pattern pattern2 = Pattern.compile("^.*$", Pattern.MULTILINE);
matcher = pattern
        .matcher("11-41 pm, Oct 20, 2014 - Stef G: Ik zal er ook zij \n ttrrttttkkk");

matcher.find();
System.out.println("group=" + matcher.group());

它输出:

group=11-41 pm, Oct 20, 2014 - Stef G: Ik zal er ook zij

在输出中,缺少回车后的文本。

如何避免这种情况?

【问题讨论】:

  • 因为多行选项不考虑换行。
  • 我也试过 DOTALL 也没有用
  • 你能说我需要什么来捕捉新的线条
  • "在多行模式下,$ 在行终止符之前匹配 或输入序列的结尾。"您可以简单地删除 $ 并让它贪婪地匹配所有内容吗?
  • 没有 vks。我的错。使用 DOTALL 选项,我可以通过点 . 匹配新行

标签: java regex multiline


【解决方案1】:

DOTALL 选项绝对适合您:

Pattern pattern2 = Pattern.compile("^.*$", Pattern.DOTALL);

但如果由于某种原因没有,您可以在实际表达式中指定选项,如下所示:

Pattern pattern2 = Pattern.compile("(?s)^.*$");

【讨论】:

    【解决方案2】:

    我认为主要的原因是您在正则表达式中使用了$ 符号,因为它表示字符串的结尾,或者,如果启用了多行,则表示一行的结尾。因此,您只需找到匹配文本中从字符串开头到行首结尾的文本。

    我认为^.*$ 形式的正则表达式根本没有用。你想达到什么目的?选择整个文本 - 所以使用.*。如果您想从第二行获取一些文本,请尝试这样做:

    ^.*$.*$
    

    或者试着让你的文字变成splitted by newline char

    String lines[] = String.split("\\r?\\n");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多