правила использования reg exp java - PullRequest
1 голос
/ 07 ноября 2011

У меня есть шаблон:

host=([a-z0-9./:]*)

это найти для меня адрес хоста. И у меня есть content

host=http//:sdf3452.domain.com/

И мой код:

    Matcher m;
    Pattern hostP = Pattern.compile("host=([a-z0-9./:]*)");
    m=hostP.matcher(content);//string 1
    String match = m.group();//string 2 
    Log.i("host", ""+hostP.matcher(content).find());

если я удаляю строки 1 и 2, я вижу true в logcat. Если оставить как есть, я получил исключение, ничего не найдено. Я пробовал все виды pattern. Через отладку посмотрел m переменную, не нашел соответствия. Пожалуйста, научите меня использовать reg exp!

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Перед тем, как group() матч, вам нужно вызвать find().

Попробуйте это так:

Pattern hostP = Pattern.compile("host=([a-z0-9./:]*)");
Matcher m = hostP.matcher(content);

if(m.find()) {
  String match = m.group();
  // ... 
}

РЕДАКТИРОВАТЬ

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

Pattern p = Pattern.compile("host=([a-z0-9./:]*)");
Matcher m = p.matcher("host=http://sdf3452.domain.com/");
if (m.find()) {
  for(int i = 0; i <= m.groupCount(); i++) {
    System.out.printf("m.group(%d) = '%s'\n", i, m.group(i));
  }
}

, которая будет печатать:

m.group(0) = 'host=http://sdf3452.domain.com/'
m.group(1) = 'http://sdf3452.domain.com/'

Как видите, группа (0), такая же, как group(),содержит то, что соответствует всему шаблону.

Но следует понимать, что URL может содержать гораздо больше, чем вы определили в [a-z0-9./:]*!

0 голосов
/ 07 ноября 2011
String content = "host=http://sdf3452.domain.com/";


Matcher mm;
Pattern hostP = Pattern.compile("host=([a-z0-9./:]*)");
mm=hostP.matcher(content);
String match = "";
if (mm.find()){//use m.find() first
    match = mm.group(1);//1 is order number of brackets 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...