修改Go regex,使其不会';我没有拿起最后一个字符

修改Go regex,使其不会';我没有拿起最后一个字符,regex,go,Regex,Go,我有一个正则表达式,它在这个链接上起作用: 这是我的正则表达式字符串:(\d+[---]\(?\d+([+\-*/^]\d+?[+\-*/^]?\d+)?) 以下是我的测试字符串: (0–(2^63 - 1)) (1-(2^16 - 2)) (1-29999984) (3-32) 这是正则表达式在前两种情况下匹配的内容: 0–(2^63 - 1) 1-(2^16 - 2) // works, it doesn't match the first pair of brackets 这是它在最后

我有一个正则表达式,它在这个链接上起作用:

这是我的正则表达式字符串:
(\d+[---]\(?\d+([+\-*/^]\d+?[+\-*/^]?\d+)?)

以下是我的测试字符串:

(0–(2^63 - 1))
(1-(2^16 - 2))
(1-29999984)
(3-32)
这是正则表达式在前两种情况下匹配的内容:

0–(2^63 - 1)
1-(2^16 - 2)
// works, it doesn't match the first pair of brackets
这是它在最后两个中匹配的:

1-29999984)
3-32)
// doesn't work, it matches the closing bracket
我希望它不匹配任何测试字符串中的最后一个结束括号。目前,如果有必要,我会剥离支架,但我希望避免这种情况。如何修改正则表达式,使其按我的意愿工作?

尝试
(\d+[---)(?:\d+\\([+\-*/^]\d+[]?[+\-*/^][]?\d+))

它只是将数字或块与paren匹配


添加一些解释

 (       
   \d+ [-–] 

   (?:     # non capture for alternation

     \d+          # dd-dd form

     |         # or

     \( \d+       # dd-(dd + dd) form
     (                       
          [+\-*/^] 
          \d+ 
          [ ]? 
          [+\-*/^] 
          [ ]? 
          \d+ 
     )?
     \) 
   )
 )

你总是只有两种程度的妄想症吗?如果不是,您可能不想使用正则表达式来解决这个问题,因为它本质上是递归的。在这里可以看到答案:@panmari目前确实如此,我不希望输入将来变得更复杂。不过我会检查你的答案。谢谢你,它按预期工作。你能解释一下正则表达式中的非捕获组有什么影响吗。非卡普图尔只是房子的交替。您使用相同的正则表达式,而不是可选的paren,使其成为可选的require paren或no paren