2012-04-17 3 views
0

Как вы возвращаете только найденную группу?Регулярное выражение «Или» Вернуть одну группу Java

У меня есть это регулярное выражение:

".*>(\\d+.*)\\s.*\\(.*</|>(\\d+.+)<" 

Когда я бегу:

Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(comparisonString); 

    if(m.find() == true){ 
      System.out.println(m.group(1)); 
    } 

Всякий раз, когда вторая часть выражения сопоставляется (выражение после оператора в «OR»), нуль возвращается , Как вернуть сопоставимую группу всякий раз, когда выполняется вторичное выражение (выражение после «ИЛИ»)?

ответ

2

Вы должны использовать захватив группы:

Pattern pattern = Pattern.compile("(regexToMatch1)|(regexToMatch2)"); 
... 
read in stuff here 
... 
Matcher matcher = pattern.matcher(yourString); 
if (matcher.matches()) { 
    String firstString = matcher.group(1); 
    String secondString = matcher.group(2); 
} 

Тогда просто выбросить все, что группы не требуется.

хорошие примеры здесь: http://javamex.com/tutorials/regular_expressions/capturing_groups.shtml

Edit: Подождите, я не думаю, что я понимаю, что вы просите. Ваши группы совпадают, но группы равны нулю? Вам просто нужно ссылаться на вторую группу в вашей группе matcher.group (#); вызов.

+0

Спасибо! Я в конце концов закончилось это сделать: «если (m.group (1)! = NULL) { \t \t \t \t \t \t \t System.out.println (m.group (1)); \t \t \t \t \t \t} еще {\t \t \t \t \t \t \t System.out.println (m.group (2)); \t \t \t \t \t \t} – rmp2150

+0

О, так что только один должен соответствовать? В этом случае было бы проще иметь две необязательные группы, одна из которых будет соответствовать, используя? оператор: «(Первая группа)? (Вторая группа)?». – Charles

+0

Вместо того, чтобы поблагодарить его, почему бы вам не поддержать его ответ? –

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