1

私は正規表現を初めて使用します。数値、操作、および識別子を一致させるために正規表現を作成しましたが、次のトークンが言語キーワードであることを認識する方法を管理できませんでした。たとえば、次のようになります。

int or double or public ......

これが私のコードです:

enum TokenType{
NUMBER("-?[0-9]+.[0-9]+|-?[0-9]+"),      //int and double
OPERATION("[*|/|+|-]"),                 // arithmetic operations  
WHITESPACE("[ \t\f\r\n]+"),            // white space
IDENTI("[_]*[A-Za-z][A-Za-z0-9]*[[_]*[A-Za-z0-9]*]*"),// string like _string_string_..
//......

ここでの問題は、次のようなすべてのキーワードがint識別子になることです。たとえば、

public static int NUMBER_OF_STUDENT;

出力:

public IDENTI
static IDENTI
int IDENTI
NUM... IDENTI
........

のようないくつかのキーワードに一致する別の正規表現を作成する方法はint, double, ....?


必要に応じて、このプログラムのコード全体を投稿します。

4

2 に答える 2

0

あなたのパターンは次のとおりです。

"(int|double|public|...and so on)"

空想的なものは何もない

于 2013-11-09T18:28:24.890 に答える
0
(?!int)(?!double)([a-z0-9]+)

ntblah と itblah と dblah には一致しますが、intblah と doubleblah には一致しません

(?!int) は、int で始まるものと一致しないことを示しています。これは識別子の正規表現になり、その構文を使用してすべてのキーワードを除外します。

于 2013-11-09T18:44:22.373 に答える