Путаница в формате регулярных выражений
Я пытаюсь разобраться с некоторыми регулярными выражениями, чтобы позже запрограммировать компилятор.
если у меня есть выражение:
(а или б)*
Это так же, как а * или б *? Или это означает, что вы можете выбрать a или b ноль или более раз.
Например, используя это регулярное выражение, я могу сгенерировать {ababababa} или только строки из {aaaaaaa} или {bbbbbbb}? Если входным символом является ab, значит ли это, что только b может встречаться ноль или более раз или же может происходить и во второй раз?
Спасибо большое
1 ответ
В большинстве библиотек регулярных выражений or
оператор пишется | так что ваше регулярное выражение будет (a|b)*
,
Это действительно означает "любая строка любой длины (включая 0), состоящая только из a s и b s". Другими словами, круглые скобки работают так же, как и в любом алгебраическом выражении, для определения подвыражения: оператор * (postfix) применяется к подвыражению a|b
,
Интересный факт: (a*b*)*
точно такой же набор строк, как (a|b)*
,