Я пытаюсь сопоставить числа в Qt для подсветки синтаксиса, и я пытаюсь следующие регулярные выражения:
"[^a-fA-F_][0-9]+" // For numbers.
"[^a-fA-F_][0-9]+\\.[0-9]+" // For decimal numbers.
"[^a-fA-F_][0-9]+\\.[0-9]+e[0-9a-fA-F]+" // For scientific notation.
"[^a-fA-F_]0[xX][0-9a-fA-F]+" // For hexadecimal numbers.
Но текст соответствует, например, [1024, и выделяет [тоже. Я хотел выделить только 1024 часть.
Другая проблема заключается в том, что регулярное выражение выделяется, когда я печатаю aoe2 и когда я печатаю aoe25. Я не хочу выделять число, когда ему предшествуют буквы или подчеркивания, потому что тогда это будет идентификатор.
Как я могу решить это?
Ну это совпадает [
из-за этого утверждения:
[^a-fA-F_]
This will match anything that is not the letters A-F(any case) or an underscore
Почему вы просто не сопоставляете цифры, если это то, что вы хотите?
For integers: \b\d+
For decimal numbers: \b\d+.\d+
For scientific: \b\d+e\d+
For hexadecimal: \b[\dA-Fa-F]+
Также, как упоминает @Jan Dvorak, вы можете использовать границы слов \b
, чтобы убедиться, что ваши совпадения начинаются с начала слова (или числа). Смотрите пример здесь: http://regex101.com/r/kC6dK3
Других решений пока нет …