为什么java regex replaceAll()只返回最后一个匹配

时间:2017-08-28 17:41:02

标签: java regex

我有一个包含html代码并尝试将其中不同网址的域名替换为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

我在这里做错了什么......请让我知道

1 个答案:

答案 0 :(得分:2)

你应该重新限制.*模式,因为它匹配任何0+字符尽可能多。使用\S*,除空白之外的任何0 +字符。

此外,您需要使用.replaceAll来替换所有匹配项。

所以,使用

data = data.replaceAll("https?://\\S*/abc/", "http://localhost/");

请参阅regex demo

<强>详情

  • https? - httphttps
  • :// - 文字://子字符串
  • \\S* - 除了空格之外的任何0 +字符
  • /abc/ - /abc/子字符串。