修改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