模式匹配Java正则表达式-";一个或多个“;操作人员

模式匹配Java正则表达式-";一个或多个“;操作人员,java,regex,Java,Regex,如何在Java正则表达式中使用“一个或多个”运算符?例如,我想匹配以下内容: ((a)(b)(c))匹配 ((a))-匹配 其中a、b、c是任意字符或数字 此表达式的基本描述是一组括号中的括号集,其中包含由一个空格分隔的所有集合 \(\(\w*\)+\) 为了更清楚地了解其工作原理,请在视觉上对其进行一点扩展: \( # outer bracket ( # start of group \( # inner bracket \w* # 0 or more word cha

如何在Java正则表达式中使用“一个或多个”运算符?例如,我想匹配以下内容:

((a)(b)(c))匹配

((a))-匹配

其中a、b、c是任意字符或数字

此表达式的基本描述是一组括号中的括号集,其中包含由一个空格分隔的所有集合
\(\(\w*\)+\)

为了更清楚地了解其工作原理,请在视觉上对其进行一点扩展:

\(    # outer bracket
(     # start of group
\(    # inner bracket
\w*   # 0 or more word characters ([0-9a-zA-Z_])
\)    # inner bracket
)     # end of group
+     # and we do that group 1 or more times
\)    # outer bracket
说明:如果你申请*或+或?对于仅位于(未缩放的)括号中的内容,它将应用于括号中的整个内容,而不是仅应用于一个元素


每当我有一个正则表达式问题时,我都会在

([(.+)]+)中查找它。每个集合是否只有一个元素或者((a,b,c))是有效的?你可以看到一些很好的例子,每个集合都有相同数量的元素,但这个数字不是bounded@Supericy如果括号之间有空格,也在正则表达式中添加空格(或
\s*
如果您想对空白量进行一般性描述)@Aneem在Java中,您需要使用两个反斜杠\\将其作为一个反斜杠\传递给正则表达式引擎,因为它也是字符串中的特殊字符。@Aneem:Java使用反斜杠转义字符串中的特殊字符,如
\t
\n
,这意味着反斜杠在正则表达式解析器看到它们时消失。t为了避免这种情况,您必须将反斜杠计数加倍。我有一个快速的后续步骤:假设n是一个可变数,而不是\w{n}。有没有办法做到这一点?(我事先不知道n)@Aneem如果在运行正则表达式之前知道n是什么,那么可以动态构造正则表达式。如果不知道,可以使用*,运行正则表达式,如果匹配,则检查捕获组的长度,以确保它们的长度满足您的标准。正则表达式不需要尽可能保守,如果您能够更精确地检查它们的输出(之后是罗杰默友好的方式;)