私は Java で正規表現を使用する方法を学びたいと思っており、次のタスクを見つけました: BNF 形式のこれらの基準に基づいて、指定された入力文字列が有効な算術用語であるかどうかをチェックするクラスを作成します。
term = [Vz]summand|[Vz]summand addOp term
summand = factor | factor mulOp summand
factor = number | '('term')'
number = digit | digit number
digit = '0'|'1'|...|'9'
vz = '+'|'-'
addOp = '+'|'-'
mulOp = '*'|'/'
これらのルールを使用して、さまざまなタイプに似たいくつかのパターンを作成しました。
static Pattern vz = Pattern.compile("[+-]");
static Pattern addOp = Pattern.compile("[+-]");
static Pattern multOp = Pattern.compile("[*/]");
static Pattern digit= Pattern.compile("[0-9]");
static Pattern number = Pattern.compile(digit.pattern()+"+");
static Pattern factor = Pattern.compile(number.pattern()+"|("+term.pattern()+")");
static Pattern summand = Pattern.compile(factor.pattern()+"|"+factor.pattern()+ multOp.pattern()+"\n");
static Pattern term = Pattern.compile(vz.pattern()+"?"+summand.pattern()+"|"
+vz.pattern()+"?"+summand.pattern()+addOp.pattern()+"\n");
そして、あなたはすでに私の問題を見ています: 私は factor の定義で項を最初に定義せずに参照しています. 残念ながら、私はそれを切り替えることはできません。だから私の質問は:
そのような方法でパターンを参照する可能性はありますか? または、パターンを参照して後で定義する他のものはありますか?