3

我有以下字符串:

    String phrase = "higher than <> expected";

<>表示不超过 5 个单词的数量。

我下面的正则表达式返回无限数量的匹配,这没有帮助,因为我不想要超过 5 个匹配。

String regex = "(?i)higher than(.*?)expected(?-i)";
4

4 回答 4

4

以下正则表达式应该适合您:

(?<=higher than\s)((?:\w+\s*){1,5})(?=\s+expected)

现场演示:http ://www.rubular.com/r/EUDywHXmGm

于 2013-06-11T01:21:11.340 回答
1

Look behind 和 Look around 在这里很合适,但作为替代方案,您也可以在非捕获组的帮助下使用这个。

您还应该考虑在 之后higher than和之前有多个前导和尾随空格expected

(?:higher than\s*)((?:\w+\s*){0,5})(?:\s*expected)
于 2013-06-12T05:06:36.010 回答
1

您可以使用正则表达式匹配出现次数,尽管您可能需要扩展正则表达式。

\d{1-3}将匹配 1 到 3 位数字。

您也可以使用非贪婪匹配,因为您当前实现的问题是(.*?)匹配所有内容。例如,<.+?>将匹配一个 XML 标记。?后面的让它+变得懒惰。

这是一个很好的正则表达式参考站点

于 2013-06-10T23:31:00.070 回答
0

如果单词也可能以相反的顺序出现,我们还需要指定相反的模式:

\b(?:(?:higher than)\W+(?:\w+\W+){0,5}?(?:expected)|(?:expected)\W+(?:\w+\W+){0,5}?(?:higher than))\b
于 2018-10-01T00:33:17.853 回答