对于第一个问题,请使其变得懒惰。您可以在问号后面加上一个问号,然后该问号将尽可能少地匹配。
(?<=an).*?(?=for)
我不知道最后的额外内容对不必要的内容有什么
.好处
.*.。
对于第二个问题,您必须定义什么是“单词”。我想在这里说的可能只是一个非空格序列,后面是一个空格。像这样
S+s
像这样重复3遍
(?<=an)s(S+s){3}(?=for)为确保整个单词的模式数学使用单词边界
(?<=banb)s(S+s){1,5}(?=bforb)看到它在线在这里Regexr
{3} 会精确匹配3个,最小为1个,最大为3个,这样做 {1,3}替代方案:
正如dma_k在您的情况中正确指出的那样,不必使用后视和前瞻。请参阅此处关于分组的Matcher文档
您可以改用捕获组。只需将要提取的部分放在方括号中,它将被放入捕获组。
banb(.*?)bforb
看到它在线在这里Regexr
您可以像这样访问该组
System.out.println("I found the text: " + matcher.group(1).toString()); ^您只有一对方括号,因此简单易用,只需将其
1放入
matcher.group(1)即可访问第一个捕获组。



