Регулярные выражения для целочисленных констант и для двоичных чисел - PullRequest
1 голос
/ 22 января 2010

Я пробовал 2 вопроса, не могли бы вы сказать, прав я или нет?

  1. Регулярное выражение неотрицательных целочисленных констант в C, где числа, начинающиеся с 0, являются восьмеричными константами, а другие числа - десятичными константами.

    Я пытался 0([1-7][0-7]*)?|[1-9][0-9]*, правильно? И какую строку я могу сопоставить? Как вы думаете, 034567 совпадет и 000083 совпадет?

  2. Что такое регулярное выражение для двоичных чисел x такое, что h x + i x = j x

Я пытался (0|1){32}|1|(10)).. Как вы думаете, строка типа 10 будет соответствовать, а 11 не будет совпадать?

Пожалуйста, скажите мне, прав я или нет.

Ответы [ 6 ]

2 голосов
/ 22 января 2010

Вы всегда можете использовать http://www.spaweditor.com/scripts/regex/ для быстрой проверки того, работает ли конкретное регулярное выражение так, как вы намереваетесь. Это вместе с Google может помочь вам найти нужное вам регулярное выражение.

1 голос
/ 06 декабря 2014

Вопрос 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

Или может быть обобщено на:

  1. {0} мы можем иметь бесконечное количество нулей: 0 *
  2. {1} мы можем иметь бесконечное число нулей, за которыми следует 1: 0 * 1
  3. {10} мы можем иметь бесконечное число нулей, за которыми следуют 10: 0 * 10

То есть L = 0 * | 0 * 1 | 0 * 10

1 голос
/ 22 января 2010

Ваше регулярное выражение для целочисленных констант не будет совпадать с числами base-10 длиннее двух цифр и восьмеричными числами длиннее трех цифр (2, если не считать начальный ноль). Поскольку это домашнее задание, я оставляю вам решать, что с ним не так.

Подсказка: Google для "квантификаторов повторения регулярных выражений".

1 голос
/ 22 января 2010
  1. 0([1-7][0-7])?|[1-9][0-9] неверно, потому что нет повторений - он будет соответствовать только 1 или 2-символьным строкам. Вам нужно что-то вроде 0[0-7]*|[1-9][0-9]*, хотя это не учитывает шестнадцатеричное значение (согласно спецификации).
  2. Это не ясно. Не могли бы вы перефразировать это или привести еще несколько примеров?
0 голосов
/ 22 января 2010

Существует несколько инструментов для проверки регулярных выражений, таких как The Regulator .

Если вы ищете «тест регулярного выражения», вы найдете множество ссылок на онлайн-тестеров.

0 голосов
/ 22 января 2010

Макс ответил на первый вопрос.

второе, по-видимому, неразрешимое диофантово уравнение последней теоремы Ферма. если h, i, j - ненулевые целые числа, x может быть только 1 или 2, поэтому вы ищете

^0*10?$

это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...