Skip to content

Hang when including extra modifiers in some odd cases #13

Description

@Col-E

I've been looking to make a regex that tells me how many groups (matching) there are in another given regex and found a pattern that looks like this:
image

String pattern = "\\((?!\\?:)[^)(]*+(?:[^)(]*)*+\\)";
String text = "([ \\t]+)(?:\\/\\/[^\\n]*TODO\\b[^\\n]+\\n)(\\/\\/[^\\n]+)?\\n?((\\1)(?2)\\n)*";
Matcher matcher = Pattern.compile(pattern).matcher(text);
matcher.find()

Unfortunately, calling matcher.find() in this case hangs.

Now, if I alter the pattern into \((?!\?:)[^)(]*+(?:[^)(])*+\) I still get the expected matches, and there is no more hang. I know that the behavior of the pattern is technically changed, but I control the input and it still works for all my desired cases. The standard java.util.regex impl seems to handle both cases fine. No biggie since there is a work-around, but any ideas why this hang occurs with the original pattern?

TLDR:
\((?!\?:)[^)(]*+(?:[^)(])*+\) - Works
\((?!\?:)[^)(]*+(?:[^)(]*)*+\) - Hangs, has one additional *

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions