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

时间:2015-05-28 15:49:11

标签: 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,我预计输出包含零。 我应该怎么做才能包含零?

3 个答案:

答案 0 :(得分:3)

您需要添加call start cmd.exe /C startComponent.bat` 标记(并且不需要DOTALL标记,该标记仅适用于MULTILINE^的行为):< / p>

$

这在javadoc

中说明
  

正则表达式Pattern pattern = Pattern.compile("9.*", Pattern.DOTALL); 匹配除行终止符之外的任何字符,除非指定了.标志。

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

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