Если вам нужна точная подсветка, вам нужно настоящее программирование, а не регулярные выражения. RegExs редко являются ответом на что-либо, кроме тривиальных задач. Чтобы сделать выделение лучше, вам нужно написать простой парсер. Анализ обычно состоит из отдельных компонентов, каждый из которых может что-то делать, например, идентифицировать и использовать строку или числовой литерал в кавычках. Если указанный компонент при взгляде на данный курсор не может использовать то, что находится под ним, он ничего не делает. Отсюда вы можете легко и просто разобрать или выделить.
Учитывая что-то вроде
статическое поле int = 123;
• Первый macher пропустил бы пробел перед "static". Соответствие ключевого слова, литерала и т. Д. Ничего не сделает, потому что обработка пробелов - это не их дело.
• Ключевое слово, совпадающее при нахождении над «статическим», будет использовать это. Поскольку «s» не является цифрой, буквальное совпадение ничего не делает. Шкипер пробелов ничего не делает, потому что «s» не является пробелом.
Естественно, ваш цикл продолжает перемещать курсор по входной строке, пока не будет достигнут конец. Заказ ваших спичек, конечно, важен.
Этот подход является гибким в том смысле, что он обрабатывает синтаксически некорректные фрагменты, а также легко расширяет и повторно использует отдельные средства сопоставления для поддержки выделения других языков ...