Что не так с этим регулярным выражением? - PullRequest
5 голосов
/ 02 апреля 2011

В java я пытаюсь обнаружить строки в форме: необязательное подчеркивание, заглавные буквы, а затем фигурные скобки, заключающие в себе два параметра.То есть такие вещи, как MAX{1,2} FUNC{3,7} _POW{9,10}

Я решил отложить рассмотрение параметров на потом, поэтому я использую регулярное выражение:

_?[A-Z]+//{.*//}

Но я получаю следующую ошибку при попытке скомпилировать его в объект Pattern:

Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 9
_?[A-Z]+//{.*//}
         ^

Кто-нибудь знает, в чем проблема?

Ответы [ 2 ]

19 голосов
/ 02 апреля 2011

Вам нужно убрать фигурные скобки в вашем выражении, иначе они будут рассматриваться как оператор повторения. Я думаю, что вы хотите использовать \ для этого вместо //.

4 голосов
/ 02 апреля 2011

Джон прав.Но вы также не хотите использовать '.*' жадную звезду.Вот лучшее выражение:

Pattern regex = Pattern.compile("_?[A-Z]+\\{[^}]+\\}");

Обратите внимание, что вам НЕ нужно выходить из фигурной скобки внутри класса символов.Это фундаментальный синтаксис, который вам нужно изучить, если вы хотите эффективно использовать регулярные выражения.См .: регулярные-выражения.info - (потраченный здесь час окупится много раз!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...