正则表达式-如何减少匹配的数字

时间:2019-04-10 18:45:36

标签: regex boost-regex

我想匹配一个数字,然后再匹配一次(可以使用反向引用来完成),但是要递减一位。

以下是正则表达式示例:

"([0-9])abc\\1"

是否可以从后向引用中减少一个值-\\1

修改 我使用boost正则表达式。

2 个答案:

答案 0 :(得分:1)

人们会为此而讨厌我,但是我发现这是一个有趣的练习。尽管regex不能执行算术运算,但是您可以使用条件组来有效地构建一个库,该库将每个数字映射到其-1值。

^(1)?(2)?(3)?(4)?(5)?(6)?(7)?(8)?(9)?abc(?(1)0)(?(2)1)(?(3)2)(?(4)3)(?(5)4)(?(6)5)(?(7)6)(?(8)7)(?(9)8)$

https://regex101.com/r/47XDtD/1

此处发布的另一个答案更加简单明了,并且计算效率更高,但是如果您的真实数据更加复杂(例如,如果您需要多次匹配递减的数字),那么条件组将提供更大的灵活性。

答案 1 :(得分:0)

丑陋但可行:

1abc0|2abc1|3abc2|4abc3|5abc4|6abc5|7abc6|8abc7|9abc8

只需用您的字符串替换abc

只需获取数字的所有组合即可。