Java 正则表达式程序没有按预期工作

标签 java regex multiline

在运行这个程序时,

import java.util.regex.*;

public class PatternExample {
    public static final String numbers = "1\n22\n333\n4444\n55555\n666666\n7777777\n88888888\n999999999\n0000000000";

    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("9.*", Pattern.MULTILINE);
        Matcher matcher = pattern.matcher(numbers);
        while (matcher.find()) {
            System.out.print("Start index: " + matcher.start());
            System.out.print(" End index: " + matcher.end() + " ");
            System.out.println(matcher.group());
        }
    }
}

输出是

Start index: 44 End index: 53 999999999

由于 Pattern.MULTILINE,我希望输出包含零。 我应该怎么做才能包含零?

最佳答案

您需要添加 DOTALL标志(不需要 MULTILINE 标志,它仅适用于 ^$ 的行为):

Pattern pattern = Pattern.compile("9.*", Pattern.DOTALL);

这在 javadoc 中说明

The regular expression . matches any character except a line terminator unless the DOTALL flag is specified.

关于Java 正则表达式程序没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511391/

相关文章:

java - 正则表达式对多行字符串进行分区

java - 我可以查看该程序的另一个示例吗?我很难理解它

java - java中的REGEX与replaceall和多行

java - 分发可执行 Jar 控制台应用程序

python - 在Python中从左到右匹配两个包含相同单词的字符串

regex - 如何使用正则表达式将条件格式规则应用于整行

regex - 如何在多行文本 block 上使用 Xcode 的 `Find and Replace`

perl - 在 Perl 中返回多行字符串的第一行的最简单方法是什么?

java - logback.xml 未重新扫描

java - apache xmlrpc 3.1.3 与 Java 11 兼容吗?