我想匹配一个数字,然后再匹配一次(可以使用反向引用来完成),但是要递减一位。
以下是正则表达式示例:
"([0-9])abc\\1"
是否可以从后向引用中减少一个值-\\1
?
修改 我使用boost正则表达式。
答案 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
。
只需获取数字的所有组合即可。