Estou em uma rede fechada (ou seja, sem conectividade com a Internet).
Eu tenho um script de shell bourne que solicita ao usuário inserir uma expressão regular para uso com grep -P
.
De um modo geral, gosto de fazer alguma forma de validação de entrada.
Existe uma maneira de testar uma variável de string para ver se é um regex (válido)?
(Copiar coisas da Internet para o meu sistema pode ser feito, mas leva uma eternidade e é um PITA - portanto, estou procurando uma maneira de fazer isso nativamente.)
Não, mas com algumas ferramentas não é difícil testar se um regex compila ou não.
Por exemplo, com grep:
echo | grep -P '['
- o código de saída,$?
, será2
, indicando que ocorreu um erro (e para este exemplo, grep imprimirá " grep: faltando terminar ] para classe de caractere " para stderr - você pode redirecionar stderr para /dev/null se você quiser apenas o código de saída).Um código de saída de 1 indica que o regex compilou OK, mas não correspondeu à entrada.
Esses códigos de saída são específicos do GNU grep. Outras ferramentas, se tiverem essa capacidade, provavelmente terão códigos de saída diferentes e maneiras diferentes de indicar tipos específicos de erros.
Observe que isso não está nem remotamente perto de dizer se um regex corresponderá corretamente ao que você deseja (e não corresponderá ao que você não deseja).
Resumindo, experimente e teste o código de saída. E conheça suas ferramentas.