【问题标题】:Java regex: Matching Substring with newline followed by whitespaceJava正则表达式:将子字符串与换行符后跟空格匹配
【发布时间】:2011-06-20 19:15:24
【问题描述】:

我目前正在尝试通过将字符串与正则表达式匹配来从字符串中提取子字符串。输入字符串都采用foo.bar("""foobar""") 的形式,其中 foobar 是我要提取的子字符串。 这是我为此任务编写的正则表达式:

Pattern pattern = Pattern.compile(
            ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.MULTILINE);

它可以很好地匹配简单的字符串,但只要在要匹配的字符串中出现换行符后跟空格时就会失败,即foo.bar("""foo\n bar""")

如何更改我的模式以使其也匹配这些字符串?

【问题讨论】:

    标签: java regex newline whitespace


    【解决方案1】:

    您需要Pattern.DOTALL 而不是Pattern.MULTILINEPattern.MULTILINE 是关于 ^$ 的行为,与匹配换行符与 . 无关:

    Pattern pattern = Pattern.compile(
         ".+\\(\"{3}(.+)\"{3}\\)" , Pattern.DOTALL); 
    

    【讨论】:

    • 谢谢你,做到了 :-) 当我中途更改模式以使用 (.+) 而不是 ([^"{3}]+) 时,我忘记用 DOTALL 替换 MULTILINE... 愚蠢的错误。)
    • JeanMarie,你应该点击他答案左边的复选标记,这样他就可以得到答案。
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2019-08-26
    • 2020-09-30
    • 2018-09-29
    • 2012-07-30
    相关资源
    最近更新 更多