Correspondendo uma string várias vezes usando regex em Java
Estou tendo alguns problemas em fazer o seguinte trabalho de regex. Eu gostaria da seguinte string:
"Please enter your name here"
para resultar em uma matriz com os seguintes elementos:
'please enter', 'enter your', 'your name', 'name here'
Atualmente, estou usando o seguinte padrão e, em seguida, criando um correspondente e iterando da seguinte maneira:
Pattern word = Pattern.compile("[\w]+ [\w]+");
Matcher m = word.matcher("Please enter your name here");
while (m.find()) {
wordList.add(m.group());
}
Mas o resultado que estou recebendo é:
'please enter', 'your name'
O que estou fazendo de errado? (P., eu verifiquei o mesmo regex em regexpal.com e tive o mesmo problema). Parece que a mesma palavra não será correspondida duas vezes. O que posso fazer para alcançar o resultado que quero?
Obrigado.
---------------------------------
EDITAR: Obrigado por todas as sugestões! Eu acabei fazendo isso (porque acrescenta flexibilidade em poder especificar facilmente o número de "n-grams"):
Integer nGrams = 2;
String patternTpl = "\\b[\\w']+\\b";
String concatString = "what is your age? please enter your name."
for (int i = 0; i < nGrams; i++) {
// Create pattern.
String pattern = patternTpl;
for (int j = 0; j < i; j++) {
pattern = pattern + " " + patternTpl;
}
pattern = "(?=(" + pattern + "))";
Pattern word = Pattern.compile(pattern);
Matcher m = word.matcher(concatString);
// Iterate over all words and populate wordList
while (m.find()) {
wordList.add(m.group(1));
}
}
Isto resulta em:
Pattern:
(?=(\b[\w']+\b)) // In the first iteration
(?=(\b[\w']+\b \b[\w']+\b)) // In the second iteration
Array:
[what, is, your, age, please, enter, your, name, what is, is your, your age, please enter, enter your, your name]
Nota: Obteve o padrão a partir da seguinte resposta principal:Regex Java pular partidas