我有一个包含 html 代码的字符串,并尝试将其中不同 URL 的域名替换为 http://localhost
但我应用的正则表达式始终返回最后一个匹配项,而不是整个字符串。
请参阅下面的代码片段
String data = "https://example.com/abc/xyz https://sub.example.com/abc/def https://sub-example.com/abc/ijk";
System.out.println(data);
data = data.replaceFirst("(http|https)://.*/abc/", "http://localhost/");
System.out.println(data);
下面是此代码生成的输出
http://localhost/ijk
我在这里做错了什么......请让我知道
最佳答案
您应该重新限制 .*
模式,因为它尽可能多地匹配任何 0+ 个字符。使用 \S*
,即除空格之外的任何 0 个以上字符。
此外,您需要使用 .replaceAll
来替换所有出现的情况。
所以,使用
data = data.replaceAll("https?://\\S*/abc/", "http://localhost/");
请参阅regex demo .
详细信息
https?
-http
或https
://
- 文字://
子字符串\\S*
- 除空格之外的任何 0+ 个字符/abc/
-/abc/
子字符串。
关于java - 为什么java正则表达式replaceAll()只返回最后一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45924608/