[英]Java Regex to replace only part of string (url)
我只想替換字符串的數字部分。 大多數情況下,它要么是完整的 URL,要么是 URL 的一部分,但它也可以只是一個普通的字符串。
/users/12345
變成/users/XXXXX
/users/234567/summary
變成/users/XXXXXX/summary
/api/v1/summary/5678
變成/api/v1/summary/XXXX
http://example.com/api/v1/summary/5678/single
變成http://example.com/api/v1/summary/XXXX/single
請注意,我沒有從/api/v1
替換1
到目前為止,我只有以下似乎在大多數情況下都有效:
input.replaceAll("/[\\d]+$", "/XXXXX").replaceAll("/[\\d]+/", "/XXXXX/");
但這有兩個問題:
有一個更好的方法嗎?
在 Java 中,您可以使用:
str = str.replaceAll("(/|(?!^)\\G)\\d(?=\\d*(?:/|$))", "$1X");
正則表達式詳情:
\\G
斷言位置在前一個匹配的末尾或第一個匹配的字符串的開頭。(/|(?!^)\\\\G)
: 匹配/
或捕獲組 #1 中前一個匹配的結尾(但不在開始處)\\\\d
: 匹配一個數字(?=\\\\d*(?:/|$))
:確保數字后跟/
或結尾。$1X
:用捕獲組 #1 后跟X
替換它不是這里的Java
人,但這個想法應該是可以轉移的。 只需捕獲/
、數字和/
可選,計算第二組的長度,然后再返回。
所以
(/)(\d+)(/?)
變成
$1XYZ$3
請參閱regex101.com 上的演示和此答案,了解與Python
或PHP
等價的 lambda。
首先你需要這樣的東西:
String new_s1 = s3.replaceAll("(\\/)(\\d)+(\\/)?", "$1XXXXX$3");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.