>我有这个正则表达式,它的工作原理与此链接相同: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+
)?
)
)
)