在java中,可以使用Pattern.DOTALL选项创建匹配字符串但不字符串结尾的正则表达式,并使用\ n?
示例:
1)
aaa\n==test==\naaa\nbbb\naaa
2)
bbb\naaa==toast==cccdd\nb\nc
3)
aaa\n==trick==\naaaDDDaaa\nbbb
我想匹配
\naaa\nbbb\naaa
和
cccdd\nb\nc
但是,在第三个例子中,我不想匹配DDD文本。
\naaa
答案 0 :(得分:1)
是的,有。例如,(?-m)}$
将匹配Java源文件末尾的闭括号。重点是禁用多线模式。您可以按我显示的方式禁用,也可以在Pattern
实例上设置相应的标记。
更新:我相信当你实例化一个Pattern
时,默认情况下多线是关闭的,但是在正则表达式的Eclipse中找到了。
答案 1 :(得分:0)
你需要的正则表达式是:
"(?s)==(?!.*?==)([^(?:DDD)]*)"
以下是完整代码:
String[] sarr = {"aaa\n==test==\naaa\nbbb\naaa", "bbb\naaa==toast==cccdd\nb\nc",
"aaa\n==trick==\naaaDDDaaa\nbbb"};
Pattern pt = Pattern.compile("(?s)==(?!.*?==)([^(?:DDD)]*)");
for (String s : sarr) {
Matcher m = pt.matcher(s);
System.out.print("For input: [" + s + "] => ");
if (m.find())
System.out.println("Matched: [" + m.group(1) + ']');
else
System.out.println("Didn't Match");
}
<强>输出:强>
For input: [aaa\n==test==\naaa\nbbb\naaa] => Matched: [\naaa\nbbb\naaa]
For input: [bbb\naaa==toast==cccdd\nb\nc] => Matched: [cccdd\nb\nc]
For input: [aaa\n==trick==\naaaDDDaaa\nbbb] => Matched: [\naaa]