2013-12-20 3 views
-5

Получите странный вывод из этого кода.Является ли это регулярным выражением неправильным?

  • Количество захвата групп: 3
  • Найдено значение (capturint группа (1)): Этот заказ был сделан для QT300
  • Найдено значение (capturint группа (2)): 0
  • Найдено значение (группа захвата (3)):! ОК?

Не должно ли регулярное выражение разбиваться на первое «3», так как это первая цифра после всех символов?

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class CaptureGroups1 { 
    public static void main(String args[]) { 

     String line = "This order was placed for QT3000! OK?"; 

     String pattern = "(.*)(\\d+)(.*)"; 
     Pattern r = Pattern.compile(pattern); 

     Matcher m = r.matcher(line); 
     int count = m.groupCount(); 

     System.out.println("Number of capturing groups: " + count + '\n'); 

     if (m.find()) { 
      for (int i = 1; i <= count; i++) { 
       System.out.println("Found value(capturint group(" + i + ")): " + m.group(i)); 
      } 
     } else { 
      System.out.println("Not Found"); 
     } 
    } 
} 
+0

Это правильно в зависимости от того, что вы хотите сделать. –

+0

@SotiriosDelimanolis Поскольку он хочет захватить более одной группы, я не думаю, что это можно считать правильным. –

+0

Публикация блока кода и просто высказывание «* это неправильно? *» Не приведет вас никуда. Опишите, что вы хотите, и сообщите нам, есть ли какие-либо ошибки/неожиданные результаты. –

ответ

0

Я думаю, что это неправильно в вашем смысле. Я подозреваю, что вы ищете это.

String pattern = "(\\D*)(\\d+)(.*)"; 

Возможно, вы хотите также проверить неохотные квантификаторы.

http://docs.oracle.com/javase/tutorial/essential/regex/quant.html

+0

Я основываю свой ответ на предположении, что OP хочет получить номер. –

+0

Может ли кто-нибудь уточнить, как шаблон на самом деле соответствует строке из данного регулярного выражения. Может быть, я чего-то не хватает. Не переводится ли мое регулярное выражение в соответствие с любым количеством символов, за которым следуют 1 или более цифр, за которым следует любое количество символов? – user2130360

+0

На самом деле я не думаю, что вам нужен неохотный квалификатор здесь – Cruncher

0

Если вы хотите, чтобы захватить числовые группы, вероятно, удаляя скобку из (.*) поможет вам. На самом деле, они вам даже не нужны:

String pattern = "(\\d+)"; 
+0

Извините, ребята, я боролся с тем, что он продолжал жаловаться на то, что он не отформатирован ... Я хотел знать, почему этот шаблон не разбивает строку на то, что я ожидал. Как вы можете добавить новую строку в этом месте? выходы: Количество групп для захвата: 3 \ n Найдено (группа с захватом (1)): Этот заказ был размещен для QT300 Найдено значений (группа с захватом (2)): 0 Найдено (группа с захватом (3))):! ОК? – user2130360

+0

Aroon

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