2016-01-14 2 views
0

Не слишком знакомы с регулярным выражением, но у меня есть блок кода, который, похоже, не работает должным образом, я думаю, что знаю почему, но искал бы решение.regex pattern matcher

Вот строка «WhereClause»

where filter_2_id = 20 and acceptable_flag is true 

String whereClause = report.getWhereClause(); 
     String[] tokens = whereClause.split("filter_1_id"); 
     Pattern p = Pattern.compile("(\\d{3})\\d+"); 
     Matcher m = p.matcher(tokens[0]); 
     List<Integer> filterList = new ArrayList<Integer>(); 
     if (m.find()) { 
      do { 
       String local = m.group(); 
       filterList.add(Integer.parseInt(local)); 
      } while (m.find()); 
     } 

Когда я отладки, похоже, что он получает в случае (m.find()) {а затем он просто полностью пропускает его. Это связано с тем, что шаблон регулярного выражения (\ d {3} \ d +) ищет только цифры, превышающие 3 цифры? Я действительно нуждаюсь в нем для сканирования любого набора чисел, поэтому я должен просто включить его как 0-9 внутри?

Помощь/совет пожалуйста

+0

однако, если вы посмотрите на строку, там есть номер ... мне это не нужно, просто любые числа после знака = – Buccaneer

+1

Вы не предоставили образец ввода и ожидаемый результат – anubhava

+0

'\ d' будет соответствовать 1 значению. Это то же самое, что и '[0-9]'. Выражение '{3}' означает соответствие предыдущего шаблона ровно 3 раза. – dsh

ответ

0

Вы можете попробовать регулярное выражение "=\\s*(\\d+)", а затем изменить m.group() к m.group(1). Это должно искать знак равенства, возможно, за которым следует пробел, а затем последовательность из одной или нескольких цифр. Ввод цифр в круглые скобки создает группу, которая будет группой 1 (группа 0 - это полное совпадение).