修改 Go 正则表达式,使其不会选取最后一个字符



>我有这个正则表达式,它的工作原理与此链接相同:https://regex101.com/r/HVKfYU/1

这是我的正则表达式字符串:(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+[ ]?[+-*/^][ ]?d+)?)))

演示

它只是匹配数字或块与帕伦


添加一些 explern

(       
d+ [-–] 
(?:     # non capture for alternation
d+          # dd-dd form
|         # or
( d+       # dd-(dd + dd) form
(                       
[+-*/^] 
d+ 
[ ]? 
[+-*/^] 
[ ]? 
d+ 
)?
) 
)
)

最新更新