这个正则表达式有什么问题?

时间:2011-04-02 16:53:48

标签: java regex function

在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 个答案:

答案 0 :(得分:19)

您需要在表达式中转义大括号,否则它们将被视为重复运算符。我认为您要使用\代替//

答案 1 :(得分:4)

约翰是对的。但你也不想使用'.*'贪婪点星。这是一个更好的正则表达式:

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

请注意,您不需要在字符类中转义大括号。如果您想有效地使用正则表达式,这是您需要学习的基本语法。请参阅:regular-expressions.info - (这里花费的一小时将为自己支付很多次!)