Как получить совпадающую часть шаблона в регулярном выражении? - PullRequest
1 голос
/ 30 октября 2011

Например:

Pattern pattern = Pattern.compile("a(.*)b");
Matcher matcher = pattern.matcher("a19203b");
matcher.find();
System.out.println(matcher.group());

Это распечатывает всю строку (a19203b).Все что мне нужно это 19203.Как я могу получить это в Java?

(например, в правиле mod_rewrite я бы сделал что-то вроде RewriteRule article/(.*) article.php?id=$1, где $1 - нужная мне строка)

Ответы [ 2 ]

4 голосов
/ 30 октября 2011

Нашел решение. Вместо matcher.group() используйте matcher.group(1).

Pattern pattern = Pattern.compile("a(.*)b");
Matcher matcher = pattern.matcher("a19203b");
matcher.find();
System.out.println(matcher.group(1));
1 голос
/ 30 октября 2011

Используйте lookbehinds / lookaheads:

Pattern regex = Pattern.compile("(?<=a).*(?=b)");

Не захватывай то, что не хочешь захватить. Здесь весь ваш матч будет тем, что вы хотите.

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