Я думаю, что здесь полезно взглянуть на формальное определение регулярных выражений, т. е. найти каждое регулярное выражение, e какой язык L(e) его создает.
Итак, начнем с простого:
(1) Как насчет регулярного выражения a (только буква)? Его язык
L(a) := {a},
просто одно слово/символ "а".
(2) Для регулярного выражения e1 + e2, где e1 и e2 сами являются регулярными выражениями,
L(e1 + e2) := L(e1) U L(e2).
Так, например. если a и b символы, L(a+b) = {a, b}.
(3) Для регулярного выражения e1 e2 (объединение), где e1 и e2 сами являются регулярными выражениями,
L(e1 e2) := all words w such that
we can write w = w_1w_2 with w_1 in L(e1) and w_2 in L(e2)".
(4) Как насчет регулярного выражения *e**, где e может быть самим регулярным выражением? Интуитивно слово находится в L(e*), если оно имеет форму w_1 w_2w_3w_4...w_n, где w_i находится в L(e) для каждого i. Так
L(e*) := all words w such that we can write
w = w_1 w_2 .. w_n
for a n >= 0 with all w_i in L(e) (for i = 1, 2, ..., n)
Итак, как насчет L((a* + b*))?
L((a* + b*))
(according to rule 2)
= L(a*) U L(b*)
(according to rule 4/1)
= {eps, a, aa, aaa, aaaa, ....} U {eps, b, bb, bbb, bbbb}
= all strings that have either only a's OR only b's in it
(including eps, the so-called empty word)
Аналогично для (a* b*):
L((a* b*))
(according to rule 3)
= all words w = w_1 w_2 with w_1 in L(a*) and w_2 in L(b*)
= {eps eps, eps b, a eps, ab, aa eps, aab, ...}
= {eps, b, a, ab, aa, aab, aabb, ... }
= all strings that first have zero or more a's, then zero or more b's.
Для начала, я думаю, будет полезно «деконструировать» регулярное выражение, как мы сделали выше, поскольку регулярные выражения также можно рассматривать как деревья, как и более известные арифметические выражения, например:
+
/ \
* *
| |
a b
person
Pachelbel
schedule
27.01.2016
*+
— притяжательный жадный квантификатор. Получайте удовольствие: regular-expressions.info/possessive.html - person hek2mgl   schedule 12.12.2015+
используется в качестве оператора дизъюнкции (или), который распространен в математике. - person rici   schedule 12.12.2015a*
илиb*
, эквивалентное выражение будетa*|b*
. Если это единственное выражение, оно будет соответствовать подстроке всехa
или всехb
, но не обоих одновременно. Если этоa*b*
, это будет иметь тот же эффект, что и другой, с добавлением может быть смесьa
, а затемb
. Это выражениеa*+b*
в качестве регулярного выражения использует несколько сложный оператор, где+
является модификатором квантификатора. В этом случае он говорит откатной части движка не возвращать никакиеa
после совпадения. Это сложная тема и, вероятно, не то, что вы намеревались. - person   schedule 13.12.2015a*+
совершенно верно.a*
регулярное выражение, к которому применяется постфикс+
, потому что еслиR
является каким-либо регулярным выражением, тоR+
означает одно или несколько из них. Конечно, данный язык регулярных выражений может явно указать, что*+
рассматривается как токен, который либо не имеет заданного значения (зарезервирован для использования в будущем), либо имеет какое-то особое значение. - person Kaz   schedule 28.01.2016*+
является особенным, вы все равно можете писать(a*)+
!!! - person Kaz   schedule 28.01.2016