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.
在 运行 这个节目中,
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 theDOTALL
flag is specified.
您正在寻找 Pattern.DOTALL
,请使用以下内容:
Pattern pattern = Pattern.compile("9.*", Pattern.DOTALL);
这里也不需要 Pattern.MULTILINE
,因为您没有使用任何开始 ^
和结束 $
锚点。
您需要添加标志 Pattern.DOTALL
。默认情况下,.
does not match line terminators.