Многострочность в регулярках Java
Регулярки при работе с многострочными строками имеют свои особенности. Разберем их на примере следующей строки, содержащей обычные символы, символы перевода строк и табуляции:
public class Main {
public static void main(String[] args) {
String txt = "";
222;
333;
444''';
}
}
Символы перевода строки можно поймать с
помощью команды '\n':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\n");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
В результате выведется следующая строка (промежутки между строками - это табуляция):
"111! 222! 333! 444"
Символы табуляции можно поймать с использованием
команды '\t':
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("\\t");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
''';
!111;
!222;
!333;
!444;
''';
Команда '.' для многострочной строки
не ловит символы перевода строки:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile(".");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
''';
!!!;
!!!!;
!!!!;
!!!!;
''';
Чтобы поймать все символы в многострочной
строке, используется хитрый прием в виде
сочетания [\s\S]. Такая конструкция
найдет все обычные символы и все переводы
строк:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[\\s\\S]");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
"!!!!!!!!!!!!!!!!!!"
Команда '$' в многострочном режиме
будет ловить конец каждой строки:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("$");
Matcher matcher = pattern.matcher(txt);
String res = matcher.replaceAll("!");
System.out.println(res);
}
}
Результат выполнения кода:
''';
111!;
222!;
333!;
444!;
''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
''';
abc!;
def!;
ghi!;
jkl!;
''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
''';
! abc;
! def;
! ghi;
! jkl;
''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
'''!;
abc;
def;
ghi;
jkl;
!''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
'''!;
! abc;
! def;
! ghi;
! jkl;
!''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
'''!;
abc!;
def!;
ghi!;
jkl!;
!''';
Дана строка:
''';
abc;
def;
ghi;
jkl;
''';
Напишите регулярку, которая сделает из этой строки следующую:
''';
!abc;
!def;
!ghi;
!jkl;
''';