Путаница в формате регулярных выражений

Я пытаюсь разобраться с некоторыми регулярными выражениями, чтобы позже запрограммировать компилятор.

если у меня есть выражение:

(а или б)*

Это так же, как а * или б *? Или это означает, что вы можете выбрать a или b ноль или более раз.

Например, используя это регулярное выражение, я могу сгенерировать {ababababa} или только строки из {aaaaaaa} или {bbbbbbb}? Если входным символом является ab, значит ли это, что только b может встречаться ноль или более раз или же может происходить и во второй раз?

Спасибо большое

1 ответ

Решение

В большинстве библиотек регулярных выражений or оператор пишется | так что ваше регулярное выражение будет (a|b)*,

Это действительно означает "любая строка любой длины (включая 0), состоящая только из a s и b s". Другими словами, круглые скобки работают так же, как и в любом алгебраическом выражении, для определения подвыражения: оператор * (postfix) применяется к подвыражению a|b,

Интересный факт: (a*b*)* точно такой же набор строк, как (a|b)*,

Другие вопросы по тегам