gpt4 book ai didi

Java ReplaceAll 与正则表达式仅替换第一个实例

转载 作者:行者123 更新时间:2023-12-01 16:55:37 26 4
gpt4 key购买 nike

我正在尝试更新 CSS 字符串中的所有 url,但我的正则表达式似乎只获取第一个。我想要得到类似的东西:

url("file")
url('file');
url(file);

我还想排除 url 为数据的内容:

url("data: ...");
url('data: ...');
url(data: ...);

我编写了一些代码来执行此操作,但它仅替换了第一个:

String str = ".ff0{font-family:sans-serif;visibility:hidden;}@font-face{font-family:ff1;src:url(f1.woff)format(\"woff\");}.ff1{font-family:ff1;line-height:1.330566;font-style:normal;font-weight:normal;visibility:visible;}@font-face{font-family:ff2;src:url(f2.woff)format(\"woff\");}.ff2{font-family:ff2;line-height:1.313477;font-style:normal;font-weight:normal;visibility:visible;}@font-face{font-family:ff3;src:url(f3.woff)format(\"woff\");}.ff3{font-family:ff3;line-height:1.386719;font-style:normal;font-weight:normal;visibility:visible;}@font-face{font-family:ff4;src:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPgo8cmVjdCB3aWR0aD0iNSIgaGVpZ2h0PSI1IiBmaWxsPSIjOWU5ZTllIj48L3JlY3Q+CjxwYXRoIGQ9Ik0wIDVMNSAwWk02IDRMNCA2Wk0tMSAxTDEgLTFaIiBzdHJva2U9IiM4ODgiIHN0cm9rZS13aWR0aD0iMSI+PC9wYXRoPgo8L3N2Zz4=)format(\"woff\");";
str = str.replaceAll("url\\((['\"]?)(?!data)(.*)\\1\\)","url(someURL/$2)");
out.println(str);

关于如何解决的任何想法?我想这与正则表达式有关。

最佳答案

您可能想使用非贪婪量词(*? 而不是 *)。

要正确排除 data 条目,还可以使用所有格量词来捕获 qoutes:?+ 而不是 ?

所以你的正则表达式应该如下所示:url\((['"]?+)(?!data)(.*?)\1\)请注意,您可能应该像在示例中那样使用额外的斜杠转义某些字符。

关于Java ReplaceAll 与正则表达式仅替换第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com