Java 正则表达式程序未按预期运行

Java regex program not working as expected

在 运行 这个节目中,

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.

您正在寻找 Pattern.DOTALL,请使用以下内容:

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

这里也不需要 Pattern.MULTILINE,因为您没有使用任何开始 ^ 和结束 $ 锚点。

您需要添加标志 Pattern.DOTALL。默认情况下,. does not match line terminators.