i_rezic
i_rezic

Reputation: 372

How to check if specific pattern precedes some character?

I am new into java regex and I could't find an answer.

This is my regex: -?\\d*\\.?\\d+(?!i) and I want it not to recognize eg. String 551i

This is my method:

private static double regexMatcher(String s, String regex) {
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(s.replaceAll("\\s+", ""));

    if (!matcher.find()) {
        return 0;
    }
    String found = matcher.group();

    return Double.parseDouble(matcher.group());

}

I want this method to return 0.0 but it keeps returning 55.0.

What am I doing wrong?

Upvotes: 3

Views: 92

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 627190

Use an atomic group to avoid backtracking into the whole digit dot digit matching pattern:

"-?(?>\\d*\\.?\\d+)(?!i)"

See the Java demo and a regex demo.

Upvotes: 1

Related Questions