2015-08-30 4 views
-1

Мне нужно найти индекс первого вхождения любого символа, кроме закладки (\ t) в строке. Я написал для этой цели следующий код:Каким будет выражение регулярного выражения?

line = " BD/SW_Pro_test"; 
Pattern pattern = Pattern.compile("[^\t]"); 
Matcher matcher = pattern.matcher(line); 


System.out.println("MATCHES AT ... "+ matcher.group(1)); 

Должен ли я ожидать, что выход будет - 1? В чем проблема с этим кодом?

Спасибо!

+2

что и вам нужно вызвать 'matches' перед любой операцией на согласовани. – Tunaki

+0

Пробовал делать двойной побег \\ t ... не повезло :( –

+1

use 'pattern.find' – vks

ответ

1

кажется, что вы недоразумение, что groupCount метод возвращает (не чувствую себя плохо об этом, это распространенное заблуждение, для регулярных выражений начинающих Java).

Возвращает количество захватывающих групп в шаблоне этого Сличитель в

Другими словами, она возвращает количество захватывающих групп, используемых в модели, а не количество групп нашли в тексте.

Например, если у нас есть регулярное выражение, как (a)b(c+) захватив группы являются

  • группа 1 (a)
  • группа 2 (c+)

так groupCount для этой модели будет возвращать 2.

Что вы, кажется, ищут что-то вроде

Pattern p = Pattern.compile("yourRegex"); 
Matcher m = p.matcher(yourData); 
while(m.find()){//this will iterate over your data and in each iteration handle single match 
    //if you want to know about indexes of current match you can use m.start or m.start(groupID) 
    String textFound = m.group(); 
    int position = m.start(); 
    //now you can handle data you found, 
    //like place them in some map which will remember match and its first position 
} 
0

Этот код работает для меня.

while(matcher.find()) { 
     System.out.println(matcher.start()); 
     break; 
    } 
+1

Нет, он не будет компилироваться из-за ']' в первой строке. – Pshemo

+1

Также, если вы хотите немедленно разбить цикл, вы должны использовать 'if (condition) {doSomething();}', а не 'while (condition) {doSomething(); перерыв} '. Кстати, я не голосующий, но я не могу также поддержать ваш ответ, поскольку он содержит ошибку. – Pshemo

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