[英]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.