正则表达式:
"-[0-9]{0,}"
字符串:
"-abc"
根据测试here,这不应该发生。我假设我在代码中做错了。
代码:
public static void main(String[] args) {
String s = "-abc";
String regex = "-[0-9]{0,}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
if (matcher.group().length() == 0)
break;
// get the number less the dash
int beginIndex = matcher.start();
int endIndex = matcher.end();
String number = s.substring(beginIndex + 1, endIndex);
s = s.replaceFirst(regex, "negative " + number);
}
System.out.println(s);
}
某些情况:我使用的语音合成程序无法发出带有前导负号的数字,因此必须将其替换为“否定”一词。
答案 0 :(得分:5)
-[0-9]{0,}
表示您的刺痛必须为-
,然后可以是 0
或more
数字。
所以-abc
0
数字
您没有指定^ and $
,因此您的正则表达式匹配foo-bar
或lll-0
甚至abc-
答案 1 :(得分:2)
{0,}
与*
的含义完全相同。你regexp因此意味着“破折号可以后跟数字”。 -abc
包含破折号,因此可以找到模式。
-\d+
应该更好地满足您的需求(不要忘记逃避java的反斜杠:-\\d+
)。
如果您希望整个字符串与模式匹配,请使用^
和$
^-\d+$
锚定正则表达式。