Нахождение регулярного выражения - PullRequest
4 голосов
/ 20 сентября 2010

У меня простой вопрос о поиске регулярного выражения для данного языка.

Мне дан язык L где:

L = { w ∈ {0, 1} *: w имеет ровно одну пару последовательных нулей}

Моя первая попытка этогодолжен был попробовать L ((0 + 1) * 00 (0 + 1) *), но я заметил, что проблема с этим будет с тем, где у меня есть (0 + 1) *, потому что если выбран 0, их может быть больше нуля, что приводит к более чем одной паре последовательных нулей.

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

Любая помощь очень ценится.

Ответы [ 4 ]

6 голосов
/ 20 сентября 2010

Попробуйте:

1 * (011 *) * 00 (11 * 0) * 1 *

Объяснение:

  • 1 *: любое количество ведущих 1
  • (011 *) *: если перед 00 стоит 0, за ним не должно следовать другое0, таким образом, разрешены только одна или несколько единиц;этот шаблон может повторяться любое количество раз
  • 00 : два 0 *
  • (11 * 0) *: если есть 0после 00 ему не должен предшествовать другой 0, таким образом, только один или несколько единиц;этот паттерн может повторяться любое количество раз
  • 1 *: любое количество трейлингов 1 *
2 голосов
/ 29 сентября 2015

Наилучший ответ для этой проблемы: (1 + 01) * 00 (1 + 10) *

1 голос
/ 20 сентября 2010

я верю, что это будет так

((1*)(01)*))* 00 ((11*)0)*1*
0 голосов
/ 20 сентября 2010

Последовательность:

  • Все, кроме 00, заканчивающееся 1
  • 00
  • Все, кроме 00, начиная с 1
...