2011-07-06 18 views
1

これは一日中動作するようになっていますが、正規表現はあまりよくありません。私の場合は可能な単語に一致する正規表現

A適切にフォーマットされた文字列は

String s = "10 LET D = 4"; 

のように見えると私はそれが正しくフォーマットだことを確認する正規表現を作成しようとしています。

今私はちょうど

boolean b = s.matches("[0-9]+ GOTO|LET [a-zA-Z] +|= [0-9]+"); 

をやっているしかし、私は私のGOTOに何か問題があるのを知っている| LETの事、私は一種のちょうどそれを作っ以来。どちらかの括弧で囲まれていないので、この時点で少し失われています。私は正規表現で可能なことをしようとしていますか?そうでなければ、他の提案はありますか?

+0

「5 GOTO D = 3」が正当なのですか?私はこの言語についていくつかの前提を持っており、彼らが正しいのであれば私はちょうど興味があります。 –

答えて

3

GOTOまたはLETという構文を使用できると仮定すると、これらの用語を括弧でくくって問題を解決する必要があります。

さらに、+=の前後にグループ化(角括弧)を追加しました。 +は正規表現の構文の一部であるため、衝突を避けるための迅速な方法です。

boolean b = s.matches("[0-9]+ (GOTO|LET) [a-zA-Z] [+=] [0-9]+"); 

注:私はこれが大きな文法の一部である場合、パーサは良く適しているかもしれないことを他のユーザーに同意

2

プログラミング言語について言えば、正規表現ではなくパーサが必要なことがあります。しかし、それは本当に言語のルールがどれほど単純かにかかっています。 regexpalを使用して正規表現をテストすることができます(グーグルで正規表現テスターの束を見つけることができます)。

ヒント:gotoとletは括弧です。少なくとも1つのスペースがある限り、任意の量の空白を受け入れることもできます。あなたは "\ s +"でそれを行うことができます。

+0

+1パーサーが最適かもしれないことに同意します。特に、これがより大きな文法の一部である場合。 –

関連する問題