首页 > 解决方案 > Java String::replaceAll 仅替换第一次出现(可能是不正确的正则表达式)

问题描述

我正在尝试从汇合中检索一些页面并将其呈现在我自己的应用程序中。我正在使用正则表达式将 confluence 图像 url 替换为我的端点,该端点在 confluence 和我的应用程序用户之间提供经过身份验证的代理。

正则表达式是:

(src|href)="\/download\/(.*)\/(.*)\/(.*)

整个替换线是:

html = html.replaceAll("(src|href)=\"\\/download\\/(.*)\\/(.*)\\/(.*)", "$1=\"" + baseUrl + "/rest/myapp/documents/"+instance+"/$2/$3/$4");

我正在尝试替换

src="/download/attachments/65591/src="https://myapp/rest/myapp/documents/{instance}/thumbnails/65591/

我使用不同的工具测试了这个正则表达式,包括https://regex101.com/r/8r77OF/4但是虽然我的测试结果是肯定的,但我的应用程序只替换了第一次出现。

我究竟做错了什么?

标签: javaregex

解决方案


正如马特建议的那样,.*是贪婪的,所以用我的正则表达式替换

"(src|href)=\"\\/download\\/(.*?)\\/(.*?)\\/(.*?)\\/"

解决了这个问题。谢谢!


推荐阅读