Чтобы позволить ^
соответствовать началу строки, а $
соответствовать концу строки, вам необходимо включить многострочную опцию. Вы можете сделать это, добавив (?m)
перед своим регулярным выражением следующим образом: "(?m)^.*@@.*$"
.
Кроме того, вы хотите продолжать группировать, пока ваше регулярное выражение находит совпадение, что можно сделать так:
while(m.find()) {
System.out.println("Output: "+m.group());
}
Обратите внимание, что регулярное выражение будет соответствовать этим строкам (не тем, которые вы указали):
Thus is @@{xyz} should not appear
This will not appear @@{abc}
Но если вы хотите заменить строки, содержащие @@
, как следует из заголовка вашего поста, сделайте это следующим образом:
public class Main {
public static void main(String[] args) {
String text = "This is the first line \n" +
"And this is second line\n" +
"Thus is @@{xyz} should not appear \n" +
"This is 3rd line and should come\n" +
"This will not appear @@{abc}\n" +
"But this will appear\n";
System.out.println(text.replaceAll("(?m)^.*@@.*$(\r?\n|\r)?", ""));
}
}
Редактировать: учитывается * nix, разрывы строк в Windows и Mac, как упомянуто PSeed.