【问题标题】:In Java regex how to match newline character [duplicate]在Java正则表达式中如何匹配换行符[重复]
【发布时间】:2019-03-22 17:16:50
【问题描述】:

知道为什么这个 Java 测试用例会失败吗?

@Test
public void newlineParse() throws Exception {
    Pattern pat = Pattern.compile("a.*b", Pattern.MULTILINE);
    assertTrue(pat.matcher("a\nb").find());
}

【问题讨论】:

  • 可能是因为. 匹配除行终止符以外的任何字符。
  • 我还以为是DOTALL 而不是MULTILINE,但已经有一段时间了。
  • 正则表达式。匹配除行终止符以外的任何字符,除非指定了 DOTALL 标志。来自the docs
  • 是的。 MULTILINE 修改 ^$ 的行为
  • 你们真的需要停止阅读文档了。如果每个人都突然开始阅读文档,我们怎么会有任何关于 SO 的问题?

标签: java regex newline multiline


【解决方案1】:

我认为问题在于Pattern.MULTILNE 不正确。对于特定示例,它应该是 Pattern.DOTALL(或在表达式中嵌入 ?s)。

MULTILINE:

启用多行模式。
在多行模式中,表达式 ^ 和 $ 分别在行终止符或输入序列的结尾之后或之前匹配。默认情况下,这些表达式仅匹配整个输入序列的开头和结尾。
也可以通过嵌入的标志表达式 (?m) 启用多行模式。

DOTALL:

在 dotall 模式下,表达式 .匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。

A working example using DOTALL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2020-06-03
    • 2023-01-02
    • 2017-01-12
    • 2014-06-30
    相关资源
    最近更新 更多