2013-11-20 4 views
0

Допустим, у меня есть код ниже:RegEx в Java, не захватив группу

Pattern pt = Pattern.compile("(?:h)?o"); 
Matcher m = pt.matcher("hours 123"); 
m.find(); 
System.out.println(m.group(0)); 

И результат

ho 

Здесь в регулярном выражении У меня есть, не захватывая group (?:h). Почему эта группа включена в окончательные результаты? Я просто хочу получить «o».

+0

FYI, не-захвата группы все еще является частью всего матча, это просто не входит в группу матчей. – OGHaza

+0

наконец-то я понял. (?: h) включен в result.it просто указывает, что я не могу использовать $ 1, это сделано по соображениям производительности. –

ответ

2

Ваш положительный lookbehind ошибочен. Оно должно быть таким:

(?<=h)o 

Для получения дополнительной информации, вы можете прочитать эту страницу: http://www.regular-expressions.info/lookaround.html

+2

То есть, _if_ OP хотел сделать lookbehind. Ничто в вопросе ОП указывает, что ОП хотел это сделать. – SQB

2

group(0) является весь матч. Вы должны

Pattern.compile("(?:h)?(o)"); 

и использовать m.group(1)

+1

Это фактический ответ на вопрос OP, даже если другой ответ был предпочтительным решением OP. – OGHaza

Смежные вопросы