Целочисленное регулярное выражение со знаком JFlex - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь создать регулярное выражение, которое будет соответствовать целочисленному значению, которое начинается с -2,147,483,648 to 2,147,483,647. Как я заметил, JFlex не поддерживает \w, \d, ^, $.

Я попытался написать такое регулярное выражение в flex-файле. Он компилируется, но не работает.

INTEGER = (0|[1-9]{1}[0-9]{0,8}|[1]{1}[0-9]{1,9}|[-]{1}[2]{1}([0]{1}[0-9]{8}|[1]{1}([0-3]{1}[0-9]{7}|[4]{1}([0-6]{1}[0-9]{6}|[7]{1}([0-3]{1}[0-9]{5}|[4]{1}([0-7]{1}[0-9]{4}|[8]{1}([0-2]{1}[0-9]{3}|[3]{1}([0-5]{1}[0-9]{2}|[6]{1}([0-3]{1}[0-9]{1}|[4]{1}[0-8]{1}))))))))|(\+)?[2]{1}([0]{1}[0-9]{8}|[1]{1}([0-3]{1}[0-9]{7}|[4]{1}([0-6]{1}[0-9]{6}|[7]{1}([0-3]{1}[0-9]{5}|[4]{1}([0-7]{1}[0-9]{4}|[8]{1}([0-2]{1}[0-9]{3}|[3]{1}([0-5]{1}[0-9]{2}|[6]{1}([0-3]{1}[0-9]{1}|[4]{1}[0-7]{1})))))))))

Есть ли способ сделать это? Или, может быть, есть какой-то более простой способ создать такое регулярное выражение?

Редактировать:

Я нашел регулярное выражение для этого из этого вопроса: Регулярное выражение для действительного 32- целое число со знаком бит

Регулярное выражение:

\b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-7])))))))))\b|-\b([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-8])))))))))\b

Я удалил \b в .bnf и .flex также.

Это регулярное выражение хорошо компилируется в .bnf файле, .flex генерирует класс без ошибок, но ничего не работает. Я проверял это регулярное выражение в обоих онлайн-тестах:

тест на регулярное выражение flex

тест на регулярное выражение

Но в тесте все в порядке , Где я ошибся?

1 Ответ

0 голосов
/ 13 марта 2020

Ну, правильное регулярное выражение для этого было:

([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-7])))))))))|-([0-9]{1,9}|1[0-9]{9}|2(0[0-9]{8}|1([0-3][0-9]{7}|4([0-6][0-9]{6}|7([0-3][0-9]{5}|4([0-7][0-9]{4}|8([0-2][0-9]{3}|3([0-5][0-9]{2}|6([0-3][0-9]|4[0-8])))))))))

Я был невнимателен. Я не заметил еще одного \b в регулярном выражении.

...