Выражение регулярного выражения для соответствия номерам языка C

Я пытаюсь сопоставить числа в 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. Я не хочу выделять число, когда ему предшествуют буквы или подчеркивания, потому что тогда это будет идентификатор.

Как я могу решить это?

1

Решение

Ну это совпадает [ из-за этого утверждения:

[^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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]