Вам нужно перефразировать вопрос.
У меня может быть любое количество a, b, c и d's, но не имеет никаких а и д, следуя любым b.
Другими словами, вы можете иметь (a|c|d)
любое количество раз, но
когда
если появляется b
, то любое число (b|c)
: так, (a|c|d)* (b (b|c)*) | ɛ)
.
Формально она равна (a|c|d)* (b|c)*
(возможно, вам стоит выяснить, почему), но на практике, несмотря на то, что она короче, эта подвержена катастрофическому сбою при оценке с помощью общих регулярных выражений.
(Если вы хотите, чтобы проверить его на вычислительных/практических регулярных выражений, в отличие от теоретических, это приводит к [acd]*(?:b[bc]*)?
.)
EDIT: Да, неправильно вопрос. «сразу после», возможно, был хорошим выбором слов. Как насчет ...
(a|c|d|b+c)*(b|ɛ)
(?:[acd]|(?:b+c))*b?
Объясняя логику здесь, вы можете использовать любого из букв, но если вы используете b
, вы можете идти с любым количеством b
с, но когда вы устаете, что следующей должен быть c
(единственный оставшийся, если вы остановили b
-инг и не можете сделать a
или c
). Затем он возвращается к обычной программе. В конце вы можете иметь b
, за которым не обязательно следует что-либо.
Можете ли вы привести пример принятых слов и отброшенных слов? – dfens
@stribizhev он не спрашивает о reixx posix, но регулярное выражение – dfens
Я могу использовать только то, что вы видите на картинке. Поэтому я не могу использовать выражение, которое вы использовали выше. Так, например, просто написать 'a' будет только один a.Написание 'a *' может быть '{Epsilon, a, aa, aaa, aaaa ...}'. Что-то вроде 'ax *' будет выглядеть как '{ax, axx, axxxxxx, ...}'. –