Структура грамматики RegEx для эволюционных алгоритмов - PullRequest
2 голосов
/ 05 мая 2019

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

Кто-нибудь знает грамматику, не зависящую от контекста, которая говорит, как регулярные выражения могут быть структурированы? Набор правил, которые при соблюдении могут объединять перечисленные ниже элементы в допустимую структуру.

Например, используя следующие подкомпоненты:

basic_elements = {
        "Character Escapes": ["\a", "\b", "\t", "\r", "\v", "\f", "\n", "\e", "\ ", "\c", "\u"],

        "Character Classes": ["[group]", "[^ group]", "[first - last]", "\p{name}", "\w", "\s", "\S", "\d", "\D"],

        "Anchors": ["^", "$", "\A", "\Z", "\z", "\G", "\b", "\B"],

        "Grouping Constructs": ["(subexpression)", "(?< name > subexpression)",
                                "(?< name1 - name2 > subexpression)",
                                "(?: subexpression )", "(?imnsx-imnsx: subexpression )", "(?= subexpression )",
                                "(?! subexpression )", "(?<= subexpression )", "(?<! subexpression )",
                                "(?> subexpression )"],

        "Quantifiers": ["*", "+", "?", "{n, }", "{n, m}", "*?", "+?", "??", "{ n }?", "{ n , }?", "{ n , m }?"],

        "Backreference Constructs": ["\number", "\k< name >"],

        "Alternation Constructs": ["|", "(?( expression ) yes | no )", "(?( name ) yes | no )"],

        "Substitutions": ["$", "${name}", "$$", "$&", "$", "$`", "$'", "$+", "$_", "", "", "", ""],

        "Regular Expression Options": ['i', 'm', 'n', 's', 'x'],

        "Miscellaneous Constructs": ['(?imnsx-imnsx)', '(?# comment )', '#']

    }

Заранее спасибо

...