регулярное выражение - как уменьшить совпадающую цифру - PullRequest
0 голосов
/ 10 апреля 2019

Я хотел бы сопоставить одну цифру, а затем сопоставить ее снова (это можно сделать, используя обратные ссылки), но уменьшив ее на единицу.

Вот пример регулярного выражения:

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

Возможно ли как-то уменьшить значение на одну величину из обратной ссылки - \\1?

Редактировать Я использую регулярное выражение Boost.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Люди будут ненавидеть меня за это, но я нашел это интересным упражнением.Хотя регулярные выражения не могут выполнять арифметику, вы можете использовать условные группы, чтобы эффективно построить библиотеку, которая сопоставляет каждую цифру с ее значением -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

Другой ответ, опубликованный здесь, намного проще и эффективнее в вычислительном отношении, но условные группы обеспечат большую гибкость в случае, если ваши реальные данные более сложны (например, если вам нужно сопоставить уменьшенное число несколько раз).

0 голосов
/ 10 апреля 2019

Ужасно, но работает:

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

Просто замените abc вашей строкой.

Просто получает все комбинации чисел.

...