0

単純化された Java コンパイラを作成しています。変数名の正規表現を書きました: "(_?[a-zA-Z]+[\w]*)"

名前は、int、double、true、false などの特定の単語にすることはできません...

^ を使ってみましたが、うまくいきません。

4

3 に答える 3

1

RE で実行できますが、人間がそれを書くのは簡単ではありません。スキャナでキーワードを識別子として扱い、後でトークナイザで識別子とキーワードを区別します。それはかなり簡単になるはずです。

于 2012-05-12T19:13:50.310 に答える
1

^ は別の目的で使用されます:

^ はパターンの先頭に表示され、行の先頭で一致する必要がある場合があります。たとえば、^abc は abc123 と一致しますが、123abc とは一致しません。

"(?!...)" の使用を検討してください:

(?!...) は、指定されたパターンが存在しない必要があるため、否定的な先読みです。

不可能または難しすぎる場合は、代わりに実際のコーディングに進むことをお勧めします。場合によっては、正規表現は実際の最適化されたコードよりもはるかに遅くなる可能性があり、非常に混乱する可能性があり、作成したものの何が問題なのかを見つけるのに問題が生じる可能性があります。

正規表現を試すには、これを確認してください: http://gskinner.com/RegExr/

クイックリファレンスについては、これを確認してください: http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm

于 2012-05-12T19:29:38.363 に答える
1

これは正規表現を介して行うべきだとは思いませんがHashSet<String>、セットに含まれる識別子名を除外して使用する方がよいと思います。

于 2012-05-12T19:03:54.470 に答える