1

D&D ゲームの仮想テーブルトップ (VTT) で使用する正規表現をプログラムしようとしています。

入力は標準文字列です: "hp "; 数字が続きます (範囲は 1 から 2000 っぽい)。角かっこで囲まれたダイス表現が続きます (例: 2d10+4 は、2 つの 10 面ダイスを転がし、2 つのダイスの合計に 4 を足すことを意味します)。

hp とサイコロの式の間の数字は、サイコロの式の平均スコアです。この例では、5.5 (10 面のサイコロの平均スコア) x 2 + 4 = 15 になります。入力文字列の例:

HP 15 (2d10+4)

文字列を識別し、平均数を可能な最大ロールに置き換える正規表現が必要です。上記の例では、15 を 24 に置き換えます。これは正規表現で可能ですか? 私の VTT は Java ベースです。文字列を識別した後に最大値を計算し、正規表現ではなく Java で数値を置き換える必要がありますか?

私は個々のピースを持っていると思いますが、交換は失敗しています:

"hp" の後の数字を探す ?<=[hH][pP]\s)[0-9]+

2d10+4 [0-9]+d[0-9]+\s?[\+\-]?\s?[^a-zA-Z]?[0-9]? を見つけます。

4

1 に答える 1

0

はい、正規表現は算術演算には適していません。特定の計算に対する答えをハードコーディングすることしかできません。したがって、可能な計算が少数しかない場合にのみ、それを行うことが理にかなっています (そのようなハードコーディングは悪いため、その場合でもそうではないと主張します)。意図を曖昧にする)。

ただし、Java は、正規表現によって検出された数値の一致が文字列のどこで始まり、どこで終わるかを教えてくれます。これは、交換目的に役立ちます。

于 2013-10-27T15:24:01.137 に答える