Вопрос 1:
Восьмеричные числа:
Строка, начинающаяся с [0], затем может сопровождаться любой цифрой 1, 2, .. 7 [1-7] (при условии отсутствия начальных нулей), но также может содержать нули после первой фактической цифры, поэтому [0-7] * (* для повторения, ноль или более раз).
Таким образом, мы получаем следующее значение RegEx для этой части: 0 [1-7] [0-7] *
Десятичные числа:
Десятичные числа не должны иметь начального нуля, поэтому начинаются со всех цифр от 1 до 9 [1-9], но нули допускаются и во всех других позициях, поэтому нам нужно объединить [0-9] *
Таким образом, мы получаем следующее значение RegEx для этой части: [1-9] [0-9] *
Поскольку у нас есть два варианта (восьмеричные и десятичные числа), и возможен любой из них, мы можем использовать свойство чередования '|' :
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)
Следовательно, следующие множества, где n <= 2, удовлетворяют уравнению: {0,1,2} base10 = {0,1,10} base2 </p>
Если какой-либо из этих элементов удовлетворяет уравнению, мы используем Чередование | (Или)
Таким образом, регулярное выражение может быть: 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