Вопрос 1:
Восьмеричные номера:
Строка, которые начинаются с [0], а затем может следовать любой цифрой 1, 2, .. 7 [1-7 ] (при отсутствии начальных нулей), но также может содержать нули после первой фактической цифры, поэтому [0-7] * (* для повторения, ноль или более).
Таким образом, мы получаем следующую RegEx для этой части: 0 [1-7] [0-7] *
Десятичные числа:
Десятичные числа не должны иметь ведущий нуль, следовательно, начать со всеми цифрами от 1 до 9 [1-9], но нули допустимы и во всех других положениях, поэтому нам необходимо конкатенировать [0-9] *
Итак, для этой части мы получаем следующий регрессивный код: [1 -9] [0-9] *
Поскольку у нас есть t wo (восьмеричные и десятичные числа), и один из них возможен, мы можем использовать свойство Alternation '|' :
L = 0 [1-7] [0-7] * | [1-9] [0-9] *
Вопрос 2:
Быстро глядя на Великая теорема Ферма:
В теории чисел, Великая теорема Ферма (иногда называемая гипотеза Ферма , особенно в старых текстах) утверждает, что никакие три положительных целых числа a, b и c не могут удовлетворять уравнению an + bn = cn для любого целого значения n больше двух. (http://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem)
Следовательно следующие множества где п = 2 < удовлетворяют уравнение: {0,1,2} base10 = {0,1,10} base2
Если какие-либо из этих элементов удовлетворяет уравнение, мы используем Alternation | (или)
Таким образом, регулярное выражение может быть: L = 0 | 1 | 10, но также может быть L = 00 | 01 | 10 или даже L = 0 | 1 | 10 | 00 | 01
Или может быть обобщена на:
- {0} мы можем иметь бесконечное число нулей: 0 *
- {1} мы можем иметь бесконечное число нулей, за которыми следует 1: 0 * 1
- {10} мы можем иметь бесконечное число нулей, затем 10: 0 * 10
Так L = 0 * | 0 * 1 | 0 * 10
Я считаю, что '0000047' является действительным восьмеричным литералом. – kennytm
Также вы можете найти регулярное выражение '077777777777777777777777777777777777777777777'. Это компилируется, но он дает предупреждение: «целочисленная константа слишком велика для своего типа». –
Но если начальное значение 0 означает восьмеричное, будет ли значение, подобное 07777, считаться отрицательным 12-битным числом (в смысле дополнения 2-го уровня)? Если 034567 - это 15-битное число и 000083 другое, оба являются положительными, потому что MSB равен нулю. Я не смотрю на ваши регулярные выражения, здесь: они слишком сложны для меня. Они выглядят не так. – pavium