Как использовать регулярное выражение java для соответствия строке
Необработанные данные:
auser1 home1b
auser2 home2b
auser3 home3b
Я хочу совместить строку, но она не работает с помощью ^(.*?)$
Однако я могу использовать a(.*?)b для соответствия user1 home1.
Как я могу сопоставить auser1 home1b
Ответ 1
По умолчанию ^ и $ соответствуют соответственно началу и концу ввода. Вам нужно включить режим MULTI-LINE с помощью (?m), что приведет к тому, что ^ и $ будут соответствовать началу и концу строки:
(?m)^.*$
Демонстрация:
import java.util.regex.*;
public class Main {
public static void main(String[] args) throws Exception {
String text = "auser1 home1b\n" +
"auser2 home2b\n" +
"auser3 home3b";
Matcher m = Pattern.compile("(?m)^.*$").matcher(text);
while (m.find()) {
System.out.println("line = " + m.group());
}
}
}
выводит следующий результат:
line = auser1 home1b
line = auser2 home2b
line = auser3 home3b
EDIT я
Тот факт, что ^.*$ ничего не соответствует, потому что . по умолчанию не соответствует \r и \n. Если вы включите DOT-ALL с помощью (?s), заставив . также соответствовать этим, вы увидите, что вся входная строка соответствует:
(?s)^.*$
EDIT II
В этом случае вы также упустите ^ и $ и просто найдите шаблон .*. Поскольку . не будет соответствовать \n, вы получите одинаковые совпадения при поиске (?m)^.*$, так как @Kobi по праву упоминается в комментариях.