2011-08-25 72 views
3
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"; 

回答

2
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

2

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

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

在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

相關問題