繁体   English   中英

带有[\\ d] *的String.replaceAll()在字符之间附加替换字符串,为什么?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM