Как использовать регулярное выражение 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 по праву упоминается в комментариях.