Java 使用正则表达式将URI中的IP地址替换为另一个IP地址

Java 使用正则表达式将URI中的IP地址替换为另一个IP地址,java,regex,Java,Regex,我正在尝试使用一个有效的正则表达式将此uri中首次出现的IP地址替换为“127.0.0.1”。 考虑到最后可能会在uri中引入带点的数字。正则表达式必须只替换URI中第一次出现的任何IP地址 产出将是: String uri = "rtps://12.10.10.124/abc/12.10.22.10"; s/[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}/127\.0\.0\.1/ 将字符串中首次出现的ip地址转换为“127.0.0.1” 这当然匹配由

我正在尝试使用一个有效的正则表达式将此uri中首次出现的IP地址替换为“127.0.0.1”。
考虑到最后可能会在uri中引入带点的数字。正则表达式必须只替换URI中第一次出现的任何IP地址

产出将是:

String uri = "rtps://12.10.10.124/abc/12.10.22.10";

s/[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}\[0-9]{1,3}/127\.0\.0\.1/

将字符串中首次出现的ip地址转换为“127.0.0.1”

这当然匹配由3个点分隔的任何4组1-3位数字(例如:999.999.999.999将匹配),如果您想要只匹配合法IP地址的内容,您可以选择:

String ipRegex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
String uri2 = uri.replaceFirst(ipRegex, "127.0.0.1");

但我个人认为这太过分了。

在Java中,您可以使用
URL
类来实现

String ipRegex = "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
String uri = uri.replaceFirst("\\d+\\.\\d+\\.\\d+\\.\\d+", "127.0.0.1");

那又怎么样?他要了一个正则表达式,这正是我给他的。从技术上讲,这也会匹配类似于
39829589.0.0.00000
的内容。当然,
39829589.0.0.00000
不太可能出现在ip地址之前的uri字符串中。我也同意你的看法。我已经更新了我的问题。我希望它与Andreas Henning提到的任何首次出现的IP地址匹配,第一次出现的IP地址不太可能是非法的。我将继续这里的第一段代码。非常感谢。不幸的是,这会引发以下异常:
线程“main”java.net.MalformedURLException:未知协议:rtps
@NullUserException噢,对不起,没有看到协议,我将代码更改为使用
URI
而不是
URL
String uri = uri.replaceFirst("\\d+\\.\\d+\\.\\d+\\.\\d+", "127.0.0.1");
URI u = new URI(uri);
u = new URI(u.getScheme(), "127.0.0.1", u.getPath(), u.getFragment());
uri = u.toString();