регулярное выражение Java - PullRequest
5 голосов
/ 12 ноября 2011

Я пытаюсь взять содержимое между вводом, мой шаблон работает неправильно.

один

Два

Три

Ответы [ 3 ]

14 голосов
/ 12 ноября 2011

Используйте прогноз для Input и используйте find в цикле, вместо matches:

Pattern pattern = Pattern.compile("Input(.*?)(?=Input|$)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
   System.out.println(matcher.group(1));
}

Смотрите, как он работает в режиме онлайн: ideone

Но лучше использовать разделение здесь:

String[] result = s.split("Input");
// You need to ignore the first element in result, because it is empty.

Посмотрите, как работает онлайн: ideone

2 голосов
/ 12 ноября 2011

это не работает, потому что m.matches имеет значение true, если и только если выражение соответствует всей строке.Вы можете пойти двумя путями:

  1. Вместо этого используйте s.split («Input»), он дает вам массив подстрок между вхождениями «Input»
  2. Use Matcher.find() и Matcher.group (int).Но имейте в виду, что ваше текущее выражение будет соответствовать всему после первого появления «Input», поэтому вы должны изменить свое выражение.

Greetings, Jost

0 голосов
/ 12 ноября 2011
import java.util.regex.*;
public class Regex {

    public static void main(String[] args) {
        String s="Input one Input Two Input Three"; 
        Pattern pat = Pattern.compile("(Input) (\\w+)"); 
        Matcher m = pat.matcher(s); 

         while( m.find() ) { 
         System.out.println( m.group(2) ); 
         }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...