Recentemente, aprendi expressões regulares e adoro escrever / usá-las. Estou procurando idéias e mais oportunidades para usá-las, no entanto, não quero usá-las como uma ferramenta para todos os fins, como costuma ser advertido pelas pessoas.
Para que tipo de coisas devo usar expressões regulares e para onde não devo usá-las? (Além do óbvio: análise de HTML).
self-improvement
regular-expressions
Click Voto a favor
fonte
fonte
if
nela.Respostas:
Onde eles brilham é onde você tem uma definição para uma sequência que é bem definida e direta, para que você possa (a) verificar se uma parte da entrada corresponde ao padrão e (b) extrair todas as partes do padrão dessa entrada, em uma única operação regex.
Por exemplo, no outro dia eu precisei lidar com certos códigos que consistiam em dois identificadores de uma letra (um dos quais tinha três opções, o outro poderia ser qualquer alfa), uma data e depois um número de dois dígitos, como este : MR_20110508_01
Um regex direto com 4 grupos nomeados me permitiu fazer uma única chamada, que verificou se um código de entrada era válido e me deu quatro grupos nomeados que eu podia acessar para extrair as quatro partes.
Quanto mais conteúdo arbitrário o destino da regex puder conter, ou quanto mais regras dependerem de outras partes do conteúdo, maior a probabilidade de você estar indo para o inferno "agora você tem dois problemas" de Jamie Zawinski.
fonte
A maioria das tarefas de correspondência de sequência pode se beneficiar de expressões regulares. Quando você para de chamá-lo de correspondência e começa a chamá-lo de análise, expressões regulares não são tão úteis. Geralmente, isso ocorre porque as pessoas tendem a chamá-lo de análise quando envolve aninhamento ou outra recursão que as expressões regulares não conseguem lidar.
Provavelmente, o local em que mais uso, onde algumas pessoas não sabem que estão disponíveis, está no meu editor enquanto procura algo. Eles não entram no meu código com tanta frequência quanto ajudam minha codificação a ir mais rápido.
fonte
Minha resposta é negativa: não tente escrever um analisador (por exemplo, para HTML ) com expressões regulares. Você pode extrair todos os tipos de informações úteis com eles, mas há algumas coisas que você não pode fazer. Considero entender regexps em pé de igualdade com SQL, C e Python - é um dos blocos de construção da computação moderna.
fonte
Eu diria que um sinal de contar que um regex não funcionará é quando você precisa de algo que possa ser aninhado. Por exemplo, uma linguagem de programação (ou HTML / XML / etc.). Depois de começar o aninhamento, é necessário armazenar o estado e usar uma máquina de estado.
Além disso, se você olhar para o regex por email aqui, poderá ver que os regexes podem ficar rapidamente ilegíveis. Às vezes, mesmo que você possa usar expressões regulares, o uso de uma gramática torna as coisas mais claras. Mesmo com expressões regulares mais simples, você pode começar rapidamente a criar algo difícil de ler / manter.
Além disso, existem muitas tarefas que não requerem regex. Por exemplo, você pode dividir uma sequência de campos separados por vírgula usando uma expressão regular, mas é muito mais simples dizer string.split (","). Geralmente, uma regex requer várias etapas / pesquisas, enquanto a divisão o faz em uma instrução. Também para uma pesquisa simples, será mais eficiente e mais claro o uso de uma rotina de pesquisa integrada.
fonte
Percebo que a barra entre lata e deve na sua pergunta não sublinha a parte mais importante: a diferença entre as duas.
Há coisas que podem ser feitas com regexps que não devem ser feitas com elas. Um exemplo é usar o seguinte regexp:
que corresponde aos números decimais divisíveis por 7 (e somente aqueles; fonte ).
fonte
Não há regras rígidas e rápidas aqui, mas eu diria que qualquer texto que possua tarefas que não tenham uma biblioteca disponível está pronto para as regexs. Também depende muito do suporte a expressões regulares do idioma que você está usando. O Perl tem amplo suporte para regexs, enquanto o java tem menos. Portanto, você esperaria usar regexs mais em perl do que java.
fonte