6

シンプルなIDEを作成し、JTextPaneに基づいて色を付けようとしています

  • 文字列 (" ")
  • コメント (// および /* */)
  • キーワード (public、int ...)
  • 数値 (69 のような整数と 1.5 のような浮動小数点数)

ソース コードに色を付ける方法は、StyledDocument 内の insertString メソッドと removeString メソッドを上書きすることです。

多くのテストの後、コメントとキーワードを完成させました。

Q1: 文字列の色付けに関しては、次の正規表現に基づいて文字列に色を付けています。

Pattern strings = Pattern.compile("\"[^\"]*\"");
Matcher matcherS = strings.matcher(text);

while (matcherS.find()) {
    setCharacterAttributes(matcherS.start(), matcherS.end() - matcherS.start(), red, false);
}

これは、コード内に "\ がある特定の種類の文字列が文字列に含まれている場合を除き、99% の時間で機能します。これにより、カラー コーディング全体が台無しになります。正規表現を修正してエラーを修正できますか?

Q2: Integers と Decimal の色付けについては、次の正規表現に基づいて数値が検出されます。

Pattern numbers = Pattern.compile("\\d+");
Matcher matcherN = numbers.matcher(text);
while (matcherN.find()) {
    setCharacterAttributes(matcherN.start(), matcherN.end() - matcherN.start(), magenta, false);
}

正規表現 "\d+" を使用することで、浮動小数点数ではなく整数のみを処理しています。また、別の文字列の一部である整数が一致しますが、これは IDE 内で必要なものではありません。整数の色分けに使用する正しい式はどれですか?

以下は、出力のスクリーンショットです。 ここに画像の説明を入力

事前に助けてくれてありがとう!

4

5 に答える 5

3

文字列の場合、これはおそらく最速の正規表現です -

"\"[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*\""

フォーマット:

 " [^"\\]* 
 (?: \\ . [^"\\]* )*
 "

整数と10進数について、私が知っている唯一の絶対確実な式は
これです -

"(?:\\d+(?:\\.\\d*)?|\\.\\d+)"

フォーマット:

 (?:
      \d+ 
      (?: \. \d* )?
   |  \. \d+ 
 )

補足として、文字列の先頭からそれぞれを個別に
実行すると、ハイライトが重なる可能性があります。

于 2015-07-08T17:48:06.397 に答える
2

試してみてください:

  1. \\b\\d+(\\.\\d+)?\\bint、float、および double の場合、
  2. "(?<=[{(,=\\s+]+)".+?"(?=[,;)+ }]+)"ストリングスの場合、
于 2015-07-08T17:34:10.853 に答える
1

整数の場合は

(?<!(\\^|\\d|\\.))[+-]?(\\d+(\\.\\d+)?)(?!(x|\\d|\\.))
于 2015-07-08T17:51:14.533 に答える
1
  1. \" 状況を無視して文字列に一致

    ".*?(?<!\\)"

上記は、 a が検出されると一致を開始し、 aが前にない"次のものに到達するまで、何に対しても一致を続けます。これは、 http://www.regular-expressions.info/lookaround.htmlで非常によく説明されている後読み機能を使用して実現されます。"\

  1. 小数点の有無にかかわらずすべての数字に一致

(\d+)(\.\d+)?は、少なくとも 1 つの数字の後にポイントと 1 より大きい他の任意の数の数字が続きます。

  1. 文字列内の数字を一致させる問題は、次の 2 つの方法で解決できます。

    • 上記を変更して、両側に空白が必要に\W(\d+)(\.\d+)?\Wなるようにします。これは、数学的な状況 (つまり 10+10) または式の最後 (つまり 10;) では満足できないと思います。

    • b これを優先する。数字の後に文字列の色がチェックされている場合、文字列のその部分は最初はピンク色になりますが、すぐに赤で上書きされます。文字列の色付けが優先されます。

于 2015-07-08T17:49:27.907 に答える