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

4
在运行此程序时,
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。 要如何才能包括零呢?

3个回答

3

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

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

这是在javadoc中说明的。
正则表达式.匹配除行终止符以外的任何字符,除非指定了DOTALL标志。

2

2
您正在寻找 Pattern.DOTALL,请使用以下内容:
Pattern pattern = Pattern.compile("9.*", Pattern.DOTALL);

此处不需要使用Pattern.MULTILINE,因为您没有使用任何起始符^和结束符$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接