Java регулярное выражение получить непревзойденную часть - PullRequest
6 голосов
/ 20 сентября 2010

Я соответствую регулярному выражению вида

abc.*def.*pqr.*xyz

Теперь строка abc123def456pqr789xyz будет соответствовать шаблону. Я хочу найти строки 123, 456, 789 с сопоставителем.

Какой самый простой способ сделать это?

Ответы [ 2 ]

8 голосов
/ 20 сентября 2010

Измените регулярное выражение на abc(.*)def(.*)pqr(.*)xyz, и скобки будут автоматически связаны с

См. документацию Класс рисунка , особенно Группы и захват , для получения дополнительной информации.

Пример кода:

final String needle = "abc(.*)def(.*)pqr(.*)xyz";
final String hayStack = "abcXdefYpqrZxyz";

// Use $ variables in String.replaceAll()
System.out.println(hayStack.replaceAll(needle, "_$1_$2_$3_"));
// Output: _X_Y_Z_


// Use Matcher groups:
final Matcher matcher = Pattern.compile(needle).matcher(hayStack);
while(matcher.find()){
    System.out.println(
        "A: " + matcher.group(1) +
        ", B: " + matcher.group(2) +
        ", C: " + matcher.group(3)
    );
}
// Output: A: X, B: Y, C: Z
1 голос
/ 20 сентября 2010

Вот регулярное выражение, которое может сделать то, что вам нужно.

abc(\\d*)def(\\d*)pqr(\\d*)xyz

Но у нас должно быть больше примеров входных строк и того, что должно соответствовать.

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