Таргетинг по шаблону и, если не найден, нацеленность на все меньшее и меньшее подмножество - PullRequest
0 голосов
/ 21 января 2012

Мне интересно найти 7 слов в строке.
Они должны появиться в порядке через пробел.

Предполагая, что в String regex есть строка с 7 словами, мне было интересно, если совпадение не произошло, чтобы сократить до 6,5,4 и т. Д. Слов.

Первое регулярное выражение, которое я подумал, было:
\\b(?:word1(\\s+)word2(\\s+)word3(\\s+)word4(\\s+)word5(\\s+)word6(\\s+)word7)\\b

  1. Выше будет происходить с использованием StringBuffer и после splitting переменной regex через пробел, Я бы построил регулярное выражение как append.
  2. Если бы я получил нет соответствия, я бы снова зациклился, сжимая выражение до word6 и т. Д. И далее уменьшая до word5 и т. Д.пока я не попал в матч.

Я не уверен, что мне действительно нравится этот подход. Могу ли я улучшить его или сделать его более эффективным способом?

Ответы [ 2 ]

1 голос
/ 21 января 2012

жадный (по умолчанию) будет делать то, что вы хотите

\\b(?:word1(?:(\\s+)word2(?:(\\s+)(?:word3(\\s+)(?:word4(\\s+)(?:word5(\\s+)(?:word6(?:(\\s+)word7)?)?)?)?)?)?)?)\\b

это сначала попытается сопоставить все, а затем пропустить word7, затем пропустить word6 ...

0 голосов
/ 21 января 2012

вы можете объединить слова и пробел, а затем вы можете указать свой предел счета, как это 1-7 в вашем случае.это может быть альтернативным решением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...