Сопоставление одной строки несколько раз с использованием регулярных выражений в Java
У меня есть некоторые проблемы с выполнением следующего регулярного выражения. Я хотел бы следующую строку:
"Please enter your name here"
привести к массиву со следующими элементами:
'please enter', 'enter your', 'your name', 'name here'
В настоящее время я использую следующий шаблон, а затем создаю сопоставление и выполняю итерации следующим образом:
Pattern word = Pattern.compile("[\w]+ [\w]+");
Matcher m = word.matcher("Please enter your name here");
while (m.find()) {
wordList.add(m.group());
}
Но результат, который я получаю:
'please enter', 'your name'
Что я делаю неправильно? (P.s., я проверил то же регулярное выражение на regexpal.com и имел ту же проблему). Кажется, одно и то же слово не будет совпадать дважды. Что я могу сделать, чтобы достичь желаемого результата?
Благодарю.
---------------------------------
РЕДАКТИРОВАТЬ: Спасибо за все предложения! Я закончил тем, что сделал это (потому что это добавляет гибкости в возможности легко указать количество «n-грамм»):
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));
}
}
Это приводит к:
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]
Примечание: получил образец из следующего верхнего ответа:Пропуски совпадений с регулярным выражением Java