定位模式,如果没有找到定位越来越小的子集

时间:2012-01-21 19:23:58

标签: java regex

我有兴趣在字符串中找到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等,直到我匹配为止。
  3. 我不确定我是否真的喜欢这种方法。我可以改进它还是以更有效的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

贪婪(默认)会做你想做的事情

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

这将首先尝试匹配所有内容,然后离开word7,然后离开word6 ...

答案 1 :(得分:0)

您可以组合单词和空格,然后您可以指定计数限制,例如在您的情况下为1-7。这可能是一种替代解决方案