Подсветка синтаксиса Java несовпадающего символа
Я реализую подсветку синтаксиса путем повторного использования кода, размещенного здесь. Проблема в том, что каждый символ "{,}, <,>" не окрашен, за ним не следует не символ. Например в
@Override
public void insertString (int offset, String str, AttributeSet a) throws BadLocationException
{
super.insertString(offset, str, a);
String text = getText(0, getLength());
int before = findLastNonWordChar(text, offset);
if (before < 0) before = 0;
int after = findFirstNonWordChar(text, offset + str.length());
int wordL = before;
int wordR = before;
while (wordR <= after) {
if (wordR == after || String.valueOf(text.charAt(wordR)).matches("\\W")) {
if (text.substring(wordL, wordR).matches("(\\W)*(SELECT|WHERE)"))
setCharacterAttributes(wordL, wordR - wordL, attr, false);
else if (text.substring(wordL, wordR).matches("(\\W)*(\\{|\\}|\\<|\\>)"))
setCharacterAttributes(wordL, wordR - wordL, attrRed, false);
else
setCharacterAttributes(wordL, wordR - wordL, attrBlack, false);
wordL = wordR;
}
wordR++;
}
}
private int findLastNonWordChar (String text, int index) {
while (--index >= 0) {
if (String.valueOf(text.charAt(index)).matches("\\W")) {
break;
}
}
return index;
}
private int findFirstNonWordChar (String text, int index) {
while (index < text.length()) {
if (String.valueOf(text.charAt(index)).matches("\\W")) {
break;
}
index++;
}
return index;
}
1 ответ
Чтобы сопоставить угловые скобки в регулярных выражениях Java 8, необходимо использовать
.*
Так что используйте:
.matches("<.*")
соответствует одной угловой скобке. Объедините это с регулярным выражением, которое у вас уже есть, чтобы получить одну угловую скобку, БЕЗ двойной обратной косой черты (\).