使用正则表达式替换另一个IP地址的IP地址

使用正则表达式替换另一个IP地址的IP地址

问题描述:

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

我试图用这个有效的正则表达式替换在这个URI中的IP地址的任何第一次出现,让我们说“127.0.0.1”。
考虑到可能在uri中引入带点的数字。正则表达式只能替换URI中第一次出现的任何IP地址。使用正则表达式替换另一个IP地址的IP地址

输出将是:

uri = "rtps://127.0.0.1/abc/12.10.22.10"; 

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

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

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]?)"; 

但我个人认为这是矫枉过正。

+0

我已更新我的问题。我希望它匹配任何第一次发生的IP地址 – dropson

+0

@dropson查看最新的答案。 – NullUserException

+0

正如Andreas Henning所说,第一次出现的IP地址非常不可能是非法的。我会坚持第一部分的代码。非常感谢。 – dropson

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”

+1

这是标记为Java。 – NullUserException

+0

等等呢?他要求一个正则表达式,而这正是我给他的。 –

+1

从技术上讲,它也会匹配类似'39829589.0.0.00000'的东西。 – NullUserException

String uri = uri.replaceFirst("\\d+\\.\\d+\\.\\d+\\.\\d+", "127.0.0.1"); 

在Java中,你可以用URL类做到这一点。

URI u = new URI(uri); 
u = new URI(u.getScheme(), "127.0.0.1", u.getPath(), u.getFragment()); 
uri = u.toString(); 
+0

不幸的是,这会抛出以下异常:“线程中的异常”主“java.net.MalformedURLException:未知协议:rtps' – NullUserException

+0

@NullUserException噢抱歉,没有看到协议,我更改了代码以使用URI而不是'URL'。 – Marcelo