É uma obrigação para todo programador aprender expressões regulares? [fechadas]

80

Sou novo em programação e, em uma entrevista, recebi uma pergunta sobre expressões regulares; Escusado será dizer que eu não poderia responder. Então eu estava pensando se deveria aprender a expressão regular? É uma obrigação para todos os programadores de todos os campos? Ou é uma obrigação para a programação de alguns campos específicos?

Perguntas relacionadas:

por user 12.04.2017 / 09:31
fonte

23 respostas

112

As expressões regulares são uma ferramenta incrivelmente conveniente, disponível em vários idiomas, que a maioria dos desenvolvedores as aprenderá mais cedo ou mais tarde.

Para um entrevistador, eles são uma boa maneira de investigar a experiência durante uma entrevista. Se você está entrevistando alguém reivindicando anos de experiência que não os entende, você precisa ir mais longe.

    
por 17.08.2012 / 22:02
fonte
54

Expressões regulares são uma ferramenta. Por acaso é uma ferramenta muito útil, muitas pessoas escolhem aprender como usá-la. No entanto, não há nenhum "requisito" para que você aprenda a usar essa ferramenta específica, assim como não há um "requisito" para você aprender qualquer outra coisa.

    
por 08.02.2012 / 17:47
fonte
33

Eu não ficaria surpreso se, por exemplo, um programador de jogos ou um programador no LHC nunca aprendesse expressões regulares. Eu posso até mesmo passar um programador de jogos a não saber SQL.

Mas, se você estiver trabalhando com sistemas de informação de qualquer tipo, e se não souber expressões regulares, estará prejudicando você mesmo.

Por outro lado, eu não esperaria que seu programador IS padrão conhecesse a matemática matricial que um programador de jogos faria. Existem disciplinas distintas de programador, no entanto, devemos nos enquadrar nos "sistemas de informação".

    
por 08.02.2012 / 17:59
fonte
22

As expressões regulares são uma maneira muito concisa de expressar como combinar padrões no texto.

O requisito para analisar e extrair dados do texto ou para validar que algum texto está de acordo com um padrão específico aparece frequentemente na programação, então eu diria que sim, é importante aprender sobre eles e entendê-los.

Eles são uma boa ferramenta para ter na sua caixa de ferramentas e eu esperaria que qualquer programador experiente soubesse como usá-los.

Um dos melhores recursos para aprender sobre expressões regulares é o livro de Jeffery Friedl, Mastering Regular Expressions . É bastante avançado, então você pode querer lê-lo quando tiver mais experiência.

Você pode começar com o tutorial em regular-expressions.info .

    
por 08.02.2012 / 17:55
fonte
15

Em contraste com a maioria das respostas aqui, não acho que o conhecimento de reg exs seja uma habilidade necessária para ser um programador produtivo. Quando eu entrevistei candidatos para um cargo, eu cavaria mais fundo se eles se sentissem compelidos a trazer suas habilidades de aprendizado. Por quê? eles são freqüentemente usados em lugares porque eles gostam do martelo certo, mas muitas vezes o que você precisava era de uma chave de fenda. Pesquise SO por HTML e regex e você verá algumas perguntas e algumas razões pelas quais o regex é um desajuste.

A capacidade de fazer o OOD adequado é necessária antes de eu advogar pela contratação de um entrevistado, o conhecimento de expressões regulares certamente não é. E eu realmente não acho que alguém acredita que você pode ser, é um programador mais produtivo conhecendo regexs, mas carente de áreas como análise, design e conhecimento do framework usado

Claro, às vezes eles são úteis, mas em meus mais de 20 anos como desenvolvedor profissional, eu acho que os usei menos de 20 vezes em código (e até codifiquei alguns scripts perl). Eu os uso regularmente para pesquisar e substituir embora.

    
por 08.02.2012 / 21:10
fonte
14

Independentemente do domínio em que você está trabalhando, as expressões regulares são uma ferramenta útil para saber, porque a maioria das linguagens de programação é escrita como texto simples. O Regex é, portanto, uma ótima maneira de manipular e refatorar seu código-fonte e é incorporado em muitos editores de texto. Tenho visto inúmeros programadores fazendo alterações repetidas nos arquivos de origem quando uma expressão regular faria as alterações com muito mais rapidez e precisão.

Isto é o que o Capítulo 3 do Programador Pragmático fala, sendo o texto simples a "matéria-prima básica da programação".

    
por 08.02.2012 / 19:41
fonte
10

Jeff Atwood escreveu um ótimo blog sobre expressões regulares, há essa citação incrível:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

Existe também uma grande resposta para uma boa pergunta um estouro de pilha que você pode querer conferir.

Você definitivamente deve saber um pouco sobre isso. Expressões regulares são fáceis de aprender, mas difíceis de dominar. Você não precisa aprender tudo sobre isso para começar a usá-lo. Apenas seja sensato sobre isso.

tl; dr

Você precisa saber sobre a tecnologia para poder tomar uma boa decisão sobre quando usá-la.

    
por 23.05.2017 / 14:40
fonte
8

Eu trabalho em uma base de código embutida que não tem uma biblioteca de expressões regulares disponível. Uma determinada tarefa exigia 275 linhas de código e levava cerca de duas semanas para depurar todos os casos de canto, para frente e para trás entre o testador e o desenvolvedor. Mais tarde eu escrevi uma função para fazer a mesma coisa como parte de um utilitário javascript. A mesma tarefa exata usando expressões regulares usou 10 linhas de código e funcionou perfeitamente em cerca de 15 minutos.

Você precisa expressões regulares? Tecnicamente não, mas é tolice intencionalmente permanecer ignorante de uma ferramenta tão eficiente.

    
por 08.02.2012 / 20:49
fonte
6

para citar outra resposta:

Regular expressions are a very terse way to express how to match patterns in text.

Portanto, se essa é uma parte importante do seu trabalho, provavelmente existe uma maneira melhor de projetar o sistema que você está desenvolvendo. A não ser que muitos textos sejam específicos do domínio da sua área (por exemplo, bioinformática).

Trabalhei em três sistemas corporativos diferentes (em três empresas diferentes ao longo de dez anos) e escrevi-os menos de cinco vezes, e isso inclui copiar e colar duas vezes um validador básico de e-mail.

    
por 08.02.2012 / 18:04
fonte
4

As expressões regulares podem ser consideradas como uma ferramenta de processamento muito útil, em vários idiomas e de plataforma cruzada. Eu posso usar regex no meu código, eu posso usar regex no meu editor, eu posso usar regex na linha de comando!

Não é só o que você precisa ou deveria aprender. É mais parecido com

WOW! Eu amo o REGEX!

    
por 08.02.2012 / 19:29
fonte
4

Você não precisa saber todas as pequenas peculiaridades da regex para poder ser um ótimo programador, especialmente porque todas elas tendem a variar um pouco em torno de diferentes implementações e linguagens de programação. O que você faz precisa saber é

  • O que são expressões regulares e regexes.
  • Que tipo de coisas eles fazem eficientemente (analisando idiomas regulares)
  • Que tipo de coisas são ineficientes (analisando coisas aninhadas, usando toneladas de referências anteriores)
  • Onde obter informações sobre a sintaxe sempre que precisar ler ou escrever uma.

De qualquer forma, você nem precisa se preocupar muito com o tempo que será preciso muito esforço para aprendê-las em primeiro lugar. Os operadores mais simples ( . , * , | , () , etc) estão quase universalmente presentes e seguem um longo caminho !

    
por 08.02.2012 / 19:58
fonte
3

Como já mencionado Regex é uma ferramenta , uma ferramenta muito útil IMHO.

Considere este exemplo:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Apenas uma linha para converter, por exemplo, um número como este 1000000.00 em "1.000.000,00"

Usar qualquer outro método será muito mais complexo

    
por 08.02.2012 / 21:24
fonte
2

Não é obrigatório. Você só precisa estar ciente de sua existência e quando usá-los. Os detalhes específicos da sintaxe são fáceis de encontrar e acertar usando o Google e as ferramentas on-line.

    
por 09.02.2012 / 13:05
fonte
2

Eu realmente aconselho você a aprender regexps. No trabalho, quando estamos contratando programadores, os candidatos que não conhecem a expressão regular geralmente são eliminados rapidamente. Não porque eles absolutamente precisam saber expressões regulares, mas porque é um indicador muito bom do seu nível de entendimento de programação e nível de dependência de programação.

Um programador real conhece suas expressões regulares

Isso é um pouco tendencioso, no entanto, como eu estou mais envolvido em programação web, onde as expressões regulares são algo que você deve se deparar muito, tanto no lado do servidor quanto no lado do cliente. Se você fosse um programador de montagem de um sistema embutido em uma máquina de lavar louça, provavelmente não encontraria expressões regulares. Mas ainda assim seria útil, pois na maioria dos casos você é mais capaz de usar seu ambiente de desenvolvimento quando conhece expressões regulares (procurar e substituir, procurar por um arquivo, pesquisar em vários arquivos, etc ...). / p>

Além disso, você achará mais fácil ser reconhecido por outros programadores se souber.

    
por 28.02.2012 / 03:19
fonte
1

É uma obrigação? Você já sabe o que você DEVE saber: que eles existem, o que são e para que são usados. Seu trabalho como programador é resolver problemas. Agora você sabe o suficiente para começar a incorporá-las em sua solução para solucionar seu problema. Você deveria aprender regexs? Absolutamente. A prioridade depende de você ... há empregos em que serão usados todos os dias e empregos onde nunca serão usados. Um guia simples seria quanto padrão corresponder aos problemas que você espera encontrar.

    
por 09.02.2012 / 08:35
fonte
1

Hmm, eu preciso separar por vírgulas e gerar a saída dessa lista de strings, deixe-me escrever uma função contendo um loop for que use um argumento separador e continue anexando-as ... ou eu poderia usar essa 'join' existente comando.

Eu preciso classificar esses objetos complexos com base em alguns atributos que cada objeto possui, deixe-me lembrar como escrever uma função de classificação que faz isso, oh, não, espere, eu posso usar a função de classificação padrão existente que suporte de idioma. Vou ter que aprender a escrever um comparador personalizado, mas não deve ser muito difícil, é obviamente melhor do que manter a minha própria função de classificação.

Estou um pouco assustado com a idéia de métodos virtuais, mas isso deve me ajudar a reduzir essas listas, cada uma para um tipo diferente de item, para uma única lista. Então eu não tenho que escrever meia dúzia de declarações similares processando cada lista de uma maneira diferente. Acho que eu deveria estudar muito e aprender essas coisas porque meu código será muito mais simples e mais limpo se eu fizer isso.

Eu preciso extrair desse arquivo de texto esses pares de palavras e valores entre todos esses outros ruídos, deixe-me escrever um analisador de cinquenta linhas para ler os caracteres um por um e se um dos caracteres parecer com o início do que Eu estou procurando eu vou definir esta variável de estado e começar a analisá-lo de forma diferente e assim por diante, etc ... é claro que o meu caso é, obviamente, tão especial ninguém mais se deparou com um problema como este antes e inventou uma solução genérica que leva uma linha de código para fazer isso. Isso me lembra que eu deveria levar os livros de programação que nunca li para a livraria de segunda mão.

    
por 09.02.2012 / 13:15
fonte
1

Resposta curta: Não Mas ... conhecimento é poder.

Sou um desenvolvedor web e descubro que qualquer expressão regular que eu geralmente precise já foi escrita para mim. No entanto, tive problemas com copiar e colar e não percebendo o que estava fazendo ou não, o que é um perigo de copiar e colar qualquer coisa.

Um exemplo: um e-mail regex que eu copiei e colei não permitiu um período ou mais em um e-mail permitido na especificação do endereço de e-mail. Na verdade, muitas pessoas usam o gmail com o email [email protected] para que seja fácil filtrar 'sitename' caso ele escolha spam.

    
por 10.02.2012 / 17:32
fonte
0

expressões regulares? Hmmm ... às vezes é útil conhecê-los, mas na maioria das vezes você sempre usa o mesmo. Eu usei regex com bastante frequência, mas não diria que sou bom com isso. Eu não gosto nada disso e acho que há coisas mais importantes para saber que regex.

Mas na validação de formulários ou dados é muito útil. Acho que quase todas as formas profissionais são validadas com regex. ASP.NET usando isso.

Mas em tudo: tente fazer uma expressão quando precisar e salve-a. Você os usará esperançosamente todos mais de uma vez. Mas não perca seu tempo com a RegEx!

    
por 08.02.2012 / 17:56
fonte
0

Depende da área / plataforma em que você está trabalhando

  1. Para aplicativos de área de trabalho, você pode viver uma vida de kool sem saber nada sobre expressões regulares. Mas lembre-se, o Visual Studio tem uma pesquisa de expressão regular, mas eu me pergunto se alguém o usa regularmente. Eu não estou pensando (você tem que corrigir sua expressão regular primeiro porque você pode fazer uma pesquisa :)).

  2. Como desenvolvedor da Web, você provavelmente precisará aprender Expressões regulares. Você pode se safar porque você pode facilmente encontrar um trecho de código on-line que bastará, mas o aprendizado ajudará.

Existem áreas como documentação, litígios, material jurídico, onde a expressão regular é uma ferramenta indispensável. Você tem que saber disso. Se você não o fizer, simplesmente não conseguirá o emprego.

Então, em suma, se não faz parte de uma descrição do trabalho, não se preocupe com isso. Se você gosta de aprender, aprenda por diversão.

    
por 08.02.2012 / 18:50
fonte
0

As expressões regulares são ferramentas muito úteis, e há muitas situações em que o programador deve usá-las. Você não deve aprender todos eles de cor para usar. Apenas use referência e faça sua tarefa. Após 10-20-50-100 (dependendo do programador) tarefas em que você usou expressões regulares, você as conhecerá de cor. Eles estão aprendendo sozinhos, você não deve aprendê-los especialmente.

    
por 08.02.2012 / 20:46
fonte
0

Já vejo muitas respostas para isso, mas todas parecem ser sobre os méritos de conhecer expressões regulares como uma ferramenta na caixa de ferramentas do programador.

Eu prefiro muito mais pensar em expressões regulares como o tipo de conhecimento que expande o entendimento de como os computadores funcionam. Uma vez que alguém realmente consiga o que uma linguagem regular é, e que você possa expressá-la com três operações simples, acredito que isso lhes dá algo além de simplesmente uma ferramenta para validar strings simples.

Eles se tornam capazes de entender melhor a análise em geral, o que é útil para praticamente todos os tipos de programação, e melhor entender como as ferramentas que usamos regularmente (compilador, editor, navegador etc.) funcionam.

Os benefícios práticos de usar expressões regulares são enormes. Mesmo que você não "programe" com elas - eu uso expressões regulares sempre encontrando / substituindo no meu editor e medindo o quanto elas me tornam mais produtivo.

Então, embora não seja necessário, acho que é uma das primeiras ferramentas que um programador deve aprender.

    
por 09.02.2012 / 12:11
fonte
0

Rob Pike não pensa assim :

Regular expressions are hard to write, hard to write well, and can be expensive relative to other technologies. Standard lexing and parsing techniques are so easy to write, so general, and so adaptable there's no reason to use regular expressions.

Another way to look at it is that lexers and parsing are matching statically-defined patterns, but regular expressions' strength is that they provide a way to express patterns dynamically. They're great in text editors and search tools, but when you know at compile time whatall the things are you're looking for, regular expressions bring far more generality and flexibility than you need.

Encouraging regular expressions as a panacea for all text processing problems is not only lazy and poor engineering, it also reinforces their use by people who shouldn't be using them at all.

É importante notar que Pike reconhece que eles têm um lugar, é claro, e IMHO, expressões regulares são uma ferramenta muito poderosa, uma que é absolutamente recompensada pelo tempo que passei aprendendo a usar, e desse ponto de vista, eu absolutamente recomendo aprendê-los. Mas é possível que a verdadeira questão seja que eles são um band-aid que me deixou saber menos sobre lexing e parsing do que deveria. :)

    
por 16.08.2012 / 23:16
fonte
0

Deixe-me apenas dizer que as Expressões Regulares geralmente são a ferramenta certa para o trabalho e são bastante úteis, especialmente com aplicativos que fazem muito processamento de texto. No entanto, memorizá-los é loucura. Eu tenho uma folha de dicas presa na minha parede que tem todos os caracteres especiais, âncoras, classes de caracteres, modificadores de padrão, metacaracteres ... Basta passar os 20 minutos necessários para aprender a usá-los e obter uma folha de dicas para manter acompanhar tudo o mais. Tudo o que você precisa é poder escrever uma expressão regular quando precisar de uma, que geralmente é a cada 6 meses - com a mesma frequência com que você se depara com um problema em que é a melhor ferramenta para usar no trabalho. A menos que você esteja no Perl, Latex, Emacs ou alguma outra equipe de processamento de texto pesado.

    
por 18.08.2012 / 00:23
fonte