Java String::replaceAll 只替换第一次出现的内容(可能是错误的regex)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java String::replaceAll 只替换第一次出现的内容(可能是错误的regex)相关的知识,希望对你有一定的参考价值。

我试图从confluence中检索一些页面,并在我自己的应用程序中渲染它。我使用regex来替换confluence图片的URL,并在confluence和我的应用程序的用户之间提供认证代理的端点。

regex是:

(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/

我使用不同的工具测试了这个regex,包括 https:/regex101.comr8r77OF4 但虽然我的测试结果是阳性,但我的申请却只替换了第一次出现的情况。

我到底做错了什么?

答案

作为 亚光 建议: .* 是贪婪的,所以把我的regex替换成了

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

解决了这个问题。谢谢!

以上是关于Java String::replaceAll 只替换第一次出现的内容(可能是错误的regex)的主要内容,如果未能解决你的问题,请参考以下文章

Java String.replaceAll()方法

Java:理解 String replaceAll() 方法

Java String ReplaceAll 方法给出非法重复错误?

Java String.replaceAll() 与后向引用(backreference)

JAVA中string.replace和string.replaceAll的区别及用法

JAVA中string.replace和string.replaceAll的区别及用法