【问题标题】:Any character including newline - Java Regex任何字符,包括换行符 - Java Regex
【发布时间】:2011-03-14 10:51:58
【问题描述】:

我认为它可能是 [.\n]+ 但这似乎不起作用?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    点不能在字符类中使用。

    查看选项Pattern.DOTALL

    Pattern.DOTALL 启用 dotall 模式。在 dotall 模式下,表达式 . 匹配任何字符,包括行终止符。默认情况下,此表达式不匹配行终止符。 Dotall 模式也可以通过嵌入式标志表达式(?s) 启用。 (s 是“单行”模式的助记符,在 Perl 中就是这样称呼的。)

    如果您只在正则表达式的一部分上需要它,您可以使用例如[\s\S].

    【讨论】:

    • 可以说比[\s\S] 更干净的是(?:.|\n)[.\n] 不起作用的原因是 . 在字符类中并不特殊;用文字或| 指定相同的东西可以正常工作。
    • @Antal 我不认为(?:.|\n) 具有便携性,因为Windows 中的新行是\r\n。也许(?:.|\n|\r),尽管现在\r 在Unix 中是多余的。
    • 好电话。我认为通常的解决方案是\r?\n
    • 在 Java 中,只需执行 (?s:...) 即可为特定部分启用 DOTALL 模式,而无需担心愚蠢的操作系统。
    • 或者,当然,(?s)...(?-s) 在这些点打开然后关闭它。
    【解决方案2】:

    编辑:虽然我的原始答案在技术上是正确的,正如 ThorSummoner 指出的那样,它可以像这样更有效地完成

    [\s\S]

    (.|\n)(.|\n|\r) 相比

    【讨论】:

    • 这似乎非常昂贵,[\s\S] 似乎对正则表达式引擎更友好。
    【解决方案3】:

    试试这个

    ((.|\n)*)
    

    多次匹配所有字符

    【讨论】:

    • 这会导致java中的java.lang.StackOverflowError。 java有什么解决方法吗?
    • @SudoCoder (?s:.*)
    猜你喜欢
    • 2016-07-31
    • 2016-07-22
    • 2014-06-03
    • 2010-11-12
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多