[英]String.replaceAll() with [\d]* appends replacement String inbetween characters, why?
我現在已經嘗試了幾個小時來獲得一個正則表達式語句,該語句將匹配未知數量的連續數字。 我相信[0-9] *或[\\ d] *應該是我想要的,當我使用Java的String.replaceAll時,它將我的替換字符串添加到不應該與正則表達式匹配的位置。
例如:我有一個輸入字符串“這是my99String問題”如果我的替換字符串是“〜”
當我跑這個
myString.replaceAll("[\\d]*", "~" )
要么
myString.replaceAll("[0-9]*", "~" )
我的返回字符串是“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ M〜”
正如您所看到的那樣,數字已被替換,但為什么它也會在字符之間追加我的替換字符串。
我希望它看起來像“這是我的〜字符串問題”
我做錯了什么,為什么java匹配這樣。
\\\\d*
匹配0位或更多位數,因此它甚至匹配空字符串。 並且在字符串中的每個字符之前都有一個空字符串。 因此,對於它們中的每一個,它都用~
替換它,因此得到結果。
請嘗試使用\\\\d+
。 而且您不需要在字符類中包含\\\\d
。
[\\d]*
匹配零或更多 (由*
定義)。 因此,你通過你的字符串獲得匹配。 如果你使用
[\\d]+
這將匹配1個或更多數字。
來自doc :
Greedy quantifiers
X? X, once or not at all
X* X, zero or more times
X+ X, one or more times
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.