单括号java正则表达式

单括号java正则表达式,java,regex,Java,Regex,我正试图使用java正则表达式检查是否只有一个大括号。 我提到了-,但无法理解 我使用的模式: (.+)(\\s*)[)]{1}(\\s*)$ 测试用例: XXXX)-匹配 XXXX)-匹配(但理想情况下应失败) 第二种情况应该失败,因为有两个支架而不是一个。我怎样才能做到这一点 您可以使用此正则表达式: "^[^\\)]*\\)[^\\)]*$" 它也不匹配以下情况: xxxx ) xxxxx ) xxxxx 问题是第一个急切匹配(.+)。在第二种情况下,它匹配XXXX),然后是您的)匹

我正试图使用java正则表达式检查是否只有一个大括号。 我提到了-,但无法理解

我使用的模式:

(.+)(\\s*)[)]{1}(\\s*)$
测试用例:

XXXX)-匹配

XXXX)-匹配(但理想情况下应失败)


第二种情况应该失败,因为有两个支架而不是一个。我怎样才能做到这一点

您可以使用此正则表达式:

"^[^\\)]*\\)[^\\)]*$"
它也不匹配以下情况:

xxxx ) xxxxx ) xxxxx

问题是第一个急切匹配
(.+)
。在第二种情况下,它匹配
XXXX)
,然后是您的
匹配。因此,将表达式替换为:

([^)]+)(\\s*)[)]{1}(\\s*)$

它是有效的。

它两者都匹配,因为第一个点可能匹配第一个大括号。使用
*[^)]
而不是
+
。它意味着一些字符,可能什么都没有,后面跟着一个不是大括号的字符。为什么要使用正则表达式
如果(s.indexOf(')')==s.lastIndexOf('))
->只出现一次
@halex-nice-one,尽管您还应该测试-1您能再描述一下您的问题吗?接受或拒绝字符串的规则是什么?
是否必须始终位于字符串末尾?如果您的字符串包含另一个
,让我们假设
“(ab)cd(ef)”
?添加更多正确和不正确输入的示例将有助于更好地使用。我有一个输入错误:([^]+)(\\s*)[)]{1}(\\s*)$是正确的。但是我仍然无法编辑我的答案。不需要放置默认的{1}。删除{1}会很好。([^]+)(\\s*)[)](\\s*)$