我有以下字符串:
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