Java Regex“ - [0-9] {0,}”似乎匹配“-abc”

时间:2013-03-29 09:39:11

标签: java regex

正则表达式:

"-[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);
}

某些情况:我使用的语音合成程序无法发出带有前导负号的数字,因此必须将其替换为“否定”一词。

2 个答案:

答案 0 :(得分:5)

-[0-9]{0,}

表示您的刺痛必须为-,然后可以是 0more 数字。

所以-abc 0 数字

您没有指定^ and $,因此您的正则表达式匹配foo-barlll-0甚至abc-

答案 1 :(得分:2)

{0,}*的含义完全相同。你regexp因此意味着“破折号可以后跟数字”-abc包含破折号,因此可以找到模式。

-\d+应该更好地满足您的需求(不要忘记逃避java的反斜杠:-\\d+)。

如果您希望整个字符串与模式匹配,请使用^$ ^-\d+$锚定正则表达式。