我有以下字符串:
String phrase = "higher than <> expected";
<>
代表一些不超过5的单词。
我的正则表达式返回无限数量的匹配,这是无用的,因为我不想要超过5场比赛。
String regex = "(?i)higher than(.*?)expected(?-i)";
答案 0 :(得分:4)
以下正则表达式适合您:
(?<=higher than\s)((?:\w+\s*){1,5})(?=\s+expected)
答案 1 :(得分:1)
您可以将出现次数与正则表达式匹配,但可能需要扩展的正则表达式。
\d{1-3}
将匹配1到3位数字。
您还可以使用非贪婪匹配,因为当前实现的问题是(.*?)
匹配所有内容。例如,<.+?>
将匹配XML标记。 ?
之后的+
使其变得懒惰。
这是一个很好的reference site for regexes。
答案 2 :(得分:1)
向后看,环顾四周适合这里,但作为替代方案,你也可以在非捕获组的帮助下使用这个。
您还应该在higher than
之后和expected
之前考虑多个前导和尾随空格。
(?:higher than\s*)((?:\w+\s*){0,5})(?:\s*expected)
答案 3 :(得分:0)
如果单词也可能以相反的顺序出现,我们还需要指定相反的模式:
double