Как использовать регулярные выражения для сопоставления двух работ в строке - PullRequest
0 голосов
/ 26 мая 2011

У меня есть строка:

user1 home1

Я могу использовать "(.*?) " для соответствия user1, но не смог использовать " (.*?)$" для соответствия home1.

Как им соответствовать? Я не могу использовать сплит. Для его реализации необходимо использовать регулярное выражение.

Ответы [ 4 ]

2 голосов
/ 26 мая 2011

Этот шаблон будет соответствовать обоим словам:

^(\w+)\s+(\w+)$

Шаблон объясняет:

^        Begin of Line
(\w+)    One or more word characters (letters and digits), stored in group $1
\s+      Whitespace, one or more chars
(\w+)    One or more word characters (letters and digits), stored in group $2
$        End of Line

Кроме того, .*?, вероятно, не то, что вам нужно, так как он может легко соответствоватьпустой строки.Когда у вас есть фиксированная структура, вам нужно жадное сопоставление.

2 голосов
/ 26 мая 2011

Примерно так же должно работать:

String str = "user1 home1";
Pattern pt = Pattern.compile("(.*)\\s+(.*)");
Matcher matcher = pt.matcher(str);
if (matcher.find()) {
    System.out.println("Group1: [" + matcher.group(1) + "] Group2: [" + matcher.group(2) + ']');
}

Поймать все в первой группе захвата, пока не будет найдено 1 или более пробелов \\s+, и после этого поместить все во вторую группу захвата.

OUTPUT

Group1: [user1] Group2: [home1]
2 голосов
/ 26 мая 2011

Вы не можете использовать .? для соответствия user1.Это соответствует 0 или 1 символу.

Вы хотите: (\S+)\s+(\S+)

0 голосов
/ 27 мая 2011

Я думаю, что это должно сработать "\\w+"
не нужно использовать группировку, как предложили несколько человек.
И вы получите цикл Java while (matcher.find()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...