Ну короче дали мне примитивную задачу.
По словесному описанию языка (Σ={a,b,c}) составить регулярное выражение.
Если в слове есть буква a, она написана не менее 2-х раз подряд.
Ну я такой сижу, думаю, и пишу:
(b*c*)*(aa)*(b*c*)*
Вбиваю это в онлайн проверку регулярок. А она работает не так как я думал.
Как я думал:
(b*c*)* - любое число b и любое число c, и эта комба повторяется любое число раз. Типа "" "b" "bbbbbc" 'ccc' проходят.
(aa)* - ну тут всё очевидно, любое число пар. Т.е. если есть а, то их только 2 и больше подряд
Ну и т.к. первая скобка под звёздочкой, то слово может начинаться или кончаться на a
А при проверке abcaacccccbabbaacaab
разбивает на
bcaaccccc
b bbaac
aab Лады, две вырезанные одиночные а это правильно. А дальше я не понял.
Почему (bcaaccccc) и (b) это две подстроки, почему b не подключено к предыдущей подстроке?
Почему эти (bbaac) (aab) две подстроки стали двумя подстроками, что им мешает быть одной? Это же не противоречит правилам
Нажмите, чтобы раскрыть...
Бро построй конечный автомат и из него уже регулярку
(b+c)*(aa(a)* + 1)(b+c)* вроде подходит
(aa)* - неправильно, у тебя не просто 2 или больше, а только четное количество букв ану и личное имхо (b+c)* выглядит как то приятнее чем (b*c*)*Это задача не по программированию, а по формальным грамматикам
Мне потом по регулярке делать праволинейную грамматику надо.
Нажмите, чтобы раскрыть...
ты где учишься? я тоже эту тему щас плотно разбираю (у меня коллоквиум по грамматикам) 