【问题标题】:Why is the beginning of a line not recognized by a regex? [duplicate]为什么正则表达式无法识别行的开头? [复制]
【发布时间】:2017-07-05 09:20:54
【问题描述】:

给定以下表达式:

Pattern.compile("^Test.*\n").matcher("Test 123\nNothing\nTest 2\n").replaceAll("foo\n")

这会产生:

"foo\nNothing\nTest 2\n"

对我来说。我希望最后一行也被替换为foo\n,因为在输入字符串中Test 2 之前有一个换行符。

为什么这里的正则表达式不匹配?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您必须在模式中添加多行标志:Pattern.MULTILINE

    Pattern.compile("^Test.*\n", Pattern.MULTILINE).matcher("Test 123\nNothing\nTest 2\n").replaceAll("foo\n")
    

    默认情况下匹配只有一行。更多信息见the javadoc

    【讨论】:

      【解决方案2】:

      在您的正则表达式的开头,您有一个^ 符号,它通常将正则表达式锚定到测试字符串的开头。您需要指定多行正则表达式选项 (Oracle Documentation link) 以使其适用于每一行的开头。

      试试这个(为了清晰起见,我已将线条分开,请随意将其单线返回):

      Pattern.compile("^Test.*\n", Pattern.MULTILINE)
             .matcher("Test 123\nNothing\nTest 2\n")
             .replaceAll("foo\n")
      

      很遗憾,我目前没有设置 Java 环境,所以我无法自己检查。

      【讨论】:

        猜你喜欢
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 2023-01-16
        相关资源
        最近更新 更多