2013-10-27 2 views
1

Я пытаюсь запрограммировать регулярное выражение для использования в виртуальном столе (VTT) для моей игры D & D.Повторная замена и вычисление кубиков регулярного выражения

Входной сигнал представляет собой стандартную строку: «hp»; , за которым следует номер (диапазон 1-2000 иш); , за которым следует выражение в квадратных скобках (например, 2d10 + 4 означает бросок 2 десятигранных кубика и добавить четыре к сумме двух кубиков).

Числа между л.с. и костью выражением является средним баллом для выражения кости - в этом примере будет 5.5 (среднего балла по десять через кубика) раз два плюс четыре = 15. Входной строка например:

hp 15 (2d10 + 4)

Я бы хотел, чтобы регулярное выражение идентифицировало строку и заменило среднее число возможным. В приведенном выше примере замените 15 на 24. Возможно ли это с регулярным выражением? Мой VTT основан на Java - мне нужно будет вычислить максимум после определения строки, а затем заменить номер на Java, а не на регулярное выражение?

Я думаю, что у меня есть отдельные части, но заменить не удается мне:

Найти число после «л» ? < = [hH] [pP] \ s) [0-9] +

Найти 2d10 + 4 [0-9] + d [0-9] + \ s? [\ + \ -]? \ s? [^ A-Za-Z]? [0-9]?

ответ

0

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

Java может, однако, сообщить вам, где совпадение числа, найденного регулярным выражением, начинается и заканчивается в строке. Это было бы полезно для целей замены.

Смежные вопросы