Regex |Содержит "BBB" - PullRequest
       9

Regex |Содержит "BBB"

0 голосов
/ 07 февраля 2019

Я пытаюсь создать регулярное выражение с символами 'a' и 'b'.Единственное правило заключается в том, что регулярное выражение должно содержать где-то слово «bbb».

Это возможно: aabbbaaaaaababa, abbba, bbb, aabbbaa, abbabbba, ... Это невозможно: abba, a, abb,bba, abbaaaabbaaaabba, ...

Понятия не имею, как я могу это выразить.

Есть идеи?Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Основываясь на теге "автоматы", я предполагаю, что вы после формального регулярного выражения для этого формального языка.В этом случае регулярное выражение имеет вид (a + b) bbb (a + b) .Анатомия этого регулярного выражения следующая:

  • (a + b) дает либо "a", либо "b"
  • (a + b) * дает любую строку "a "s и" b "s независимо от того, что
  • bbb дает строку bbb только
  • все регулярное выражение описывает любую строку, которая начинается с чего-либо, затем имеет bbb, а затем заканчивается чем-либо

Чтобы доказать правильность этого регулярного выражения, обратите внимание:

  • Это регулярное выражение генерирует только строки, содержащие подстроку bbb.Это связано с средней частью.
  • Это регулярное выражение генерирует все строки, которые содержат подстроку bbb.Предположим, что есть некоторая строка, содержащая подстроку bbb, которую не сгенерировало это регулярное выражение.Строка либо начинается с bbb, либо нет.Если это так, то строка генерируется нашим регулярным выражением путем повторения первого (a + b) нулевого раза и второго (a + b) n - 3 раза, где n - длина строки.В противном случае, если он не начинается с bbb, рассмотрите суффикс длины n - 1 как рекурсивный случай.Продолжайте так до тех пор, пока подслуча не начнется с bbb ​​(это в конечном итоге должно).Поскольку этот суффикс описывается нашим регулярным выражением, исходный регистр тоже должен быть, поскольку мы можем просто повторить первый (a + b) дополнительное количество раз, равное глубине рекурсии.
0 голосов
/ 06 марта 2019

Добрый вечер!Вы можете использовать это выражение, оно может работать

(a+b)* (bbb)(a+b)*

, используя это, чтобы генерировать тройную (bbb) минимальную строку

и, взяв закрытие (a + b), вы можете сгенерировать любой типстроки, содержащие в себе тройку b

0 голосов
/ 07 февраля 2019

Скороговорка проста

/b{3}/g

, если вам нужно, чтобы она соответствовала 3 и только 3 'b, вы можете использовать

/b{3}[^b]?/g
...