Como eu gero uma correspondência para um regex?

2

Existe uma ferramenta lá fora que aceita um argumento regex e cita uma combinação válida? Deve fazer uma string que corresponda à regex.

Por exemplo:

  • %código%
    • clear
  • %código%
    • clear ,
    • ou ls (-[al]{2}|-a -l|-l -a)
por lol 29.03.2017 / 15:35

2 respostas

2

Escolha um dos métodos da pergunta sobre estouro de pilha e use o Python para executá-lo. Por exemplo:

$ python -c 'import rstr; print(rstr.xeger("ls (-[al]{2}|-a -l|-l -a)"))'
ls -a -l

Você pode ter que pip install do módulo rstr.

    
por muru 30.03.2017 / 04:32
0

Não conheço nenhuma ferramenta que faça o que você deseja, de fato, ficaria surpreso se houvesse - o que fazer com expressões que contenham caracteres curinga (como .* , por exemplo - você esperaria que ele emitisse todos os caracteres possíveis?)

Provavelmente o mais próximo seria algum tipo de expressão regular deparser que gerasse uma árvore de análise para você, que você precisaria atravessar de raiz para folha (fazendo o backup necessário se você quiser alcançar todos os nós de folhas possíveis). Algo como o módulo YAPE :: Regex do perl, por exemplo - na verdade, você pode ser capaz para basear sua solução na extensão YAPE :: Regex :: explain :

$ printf '(-[al]{2}|-a -l|-l -a)' | 
    perl -MYAPE::Regex::Explain -ne 'print YAPE::Regex::Explain->new($_)->explain'
The regular expression:

(?-imsx:(-[al]{2}|-a -l|-l -a))

matches as follows:

NODE                     EXPLANATION
----------------------------------------------------------------------
(?-imsx:                 group, but do not capture (case-sensitive)
                         (with ^ and $ matching normally) (with . not
                         matching \n) (matching whitespace and #
                         normally):
----------------------------------------------------------------------
  (                        group and capture to :
----------------------------------------------------------------------
    -                        '-'
----------------------------------------------------------------------
    [al]{2}                  any character of: 'a', 'l' (2 times)
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    -a -l                    '-a -l'
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    -l -a                    '-l -a'
----------------------------------------------------------------------
  )                        end of 
----------------------------------------------------------------------
)                        end of grouping
----------------------------------------------------------------------

(não sei por que envolve a expressão em um grupo adicional de% não-captura (?:...) ).

Infelizmente, o módulo não parece estar disponível nos repositórios do Ubuntu, mas você deve ser capaz de instalá-lo via CPAN.

    
por steeldriver 30.03.2017 / 04:25