我有以下字符串:
String phrase = "higher than <> expected";
<>
表示不超过 5 个单词的数量。
我下面的正则表达式返回无限数量的匹配,这没有帮助,因为我不想要超过 5 个匹配。
String regex = "(?i)higher than(.*?)expected(?-i)";
我有以下字符串:
String phrase = "higher than <> expected";
<>
表示不超过 5 个单词的数量。
我下面的正则表达式返回无限数量的匹配,这没有帮助,因为我不想要超过 5 个匹配。
String regex = "(?i)higher than(.*?)expected(?-i)";
以下正则表达式应该适合您:
(?<=higher than\s)((?:\w+\s*){1,5})(?=\s+expected)
Look behind 和 Look around 在这里很合适,但作为替代方案,您也可以在非捕获组的帮助下使用这个。
您还应该考虑在 之后higher than
和之前有多个前导和尾随空格expected
。
(?:higher than\s*)((?:\w+\s*){0,5})(?:\s*expected)
您可以使用正则表达式匹配出现次数,尽管您可能需要扩展正则表达式。
\d{1-3}
将匹配 1 到 3 位数字。
您也可以使用非贪婪匹配,因为您当前实现的问题是(.*?)
匹配所有内容。例如,<.+?>
将匹配一个 XML 标记。?
后面的让它+
变得懒惰。
这是一个很好的正则表达式参考站点。
如果单词也可能以相反的顺序出现,我们还需要指定相反的模式:
\b(?:(?:higher than)\W+(?:\w+\W+){0,5}?(?:expected)|(?:expected)\W+(?:\w+\W+){0,5}?(?:higher than))\b