Java регулярное выражение - "()" скобки - PullRequest
3 голосов
/ 14 января 2012
Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find()
String str = matcher.group();

Я хочу получить "Text" на стр., Но я получаю "<a>Text</a>". Почему и как мне это сделать правильно?

Ответы [ 6 ]

5 голосов
/ 14 января 2012

matcher.group() без аргументов возвращает всю совпавшую подстроку. Используйте matcher.group(1), чтобы получить только содержимое первой группы захвата в скобках:

Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find();
String str = matcher.group(1);
4 голосов
/ 14 января 2012

Вам необходимо указать индекс группы, в данном случае 1:

Pattern pattern = Pattern.compile("<a>([a-zA-Z]+)</a>")
Matcher matcher = pattern.matcher("<a>Text</a>");
matcher.find()
String str = matcher.group(1);

Документация для Matcher.group(int)

2 голосов
/ 14 января 2012

вам нужно позвонить matcher.group с номером вашей группы захвата - если вы пропустите аргумент, будет возвращено полное совпадение.

с наилучшими пожеланиями, Carsten

ps: лучшийЧтобы быстро решить эти вопросы, обратитесь к соответствующей части java api docs .

2 голосов
/ 14 января 2012

group() возвращает весь сопоставленный текст. Вы хотите group(1), который возвращает первую разделенную пареном группу в матче. См. API документы .

2 голосов
/ 14 января 2012

Вы хотите group(1);первая группа - это весь шаблон.

См. group () и group (int) документы.

2 голосов
/ 14 января 2012

Есть еще одна перегрузка group () для matcher.Попробуйте:

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