2013-12-10 4 views
1

У меня есть строка и регулярное выражение.Regex Referencing Java

строка будет выглядеть DH18

и у меня есть регулярное выражение ([a-zA-Z]*)([0-9]*), который расщепляет до буквы и слова

Я хочу только цифры, так что содержится во второй фигурных скобках. Как мне это сделать?

Я хочу, чтобы заявление, как

if ($1 == 18) 
    blah; 

ответ

6

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

(?:[a-zA-Z]*)([0-9]*) // Non-capturing group 
(?<=[a-zA-Z]*)([0-9]*) // Lookbehind 

Обратите внимание, что регулярное выражение возвращает группы только как строки, даже если группа представляет число. Таким образом, проверка $1 == 18 необходимо использовать equals():

if (matcher.group(1).equals("18")) { 
    ... 
} 
+0

Зачем вам нужна группа, не связанная с захватом? Не будет ли '[a-zA-Z] * ([0-9] *)' достаточно? – shyam

+0

@shyam Я предполагаю, что часть букв должна присутствовать, чтобы совпадение было действительным, в противном случае OP не нужно упоминать об этом вообще. – dasblinkenlight

0
Pattern p = Pattern.compile("-?\\d+"); 
    Matcher m = p.matcher("DH18"); 
    while (m.find()) { 
     System.out.println(m.group()); //will print 18 
    } 
1

С ([a-zA-Z]*)([0-9]*) вы должны выбрать $2 вместо $1, чтобы получить цифры в $ 0 полный матч, и захватывая части начинаются с $1.

if($2.equals("18"))