Pergunta

Trabalhei por 5 anos, principalmente em java desktop aplicativos acessando bancos de dados Oracle e eu nunca ter usado expressões regulares.Agora eu entrar Estouro de Pilha e eu vejo um monte de perguntas sobre eles;Eu sinto que perdi alguma coisa.

Para o que você usa expressões regulares?

P. S.desculpe pelo meu mau inglês

Foi útil?

Solução

Considere um exemplo em Ruby:

puts "Matched!" unless /\d{3}-\d{4}/.match("555-1234").nil?
puts "Didn't match!" if /\d{3}-\d{4}/.match("Not phone number").nil?

O "/\d{3}-\d{4}/" é a expressão regular, e como você pode ver, é uma maneira MUITO concisa de encontrar uma correspondência em uma seqüência de caracteres.

Além disso, a utilização de grupos você pode extrair informações, tais como:

match = /([^@]*)@(.*)/.match("myaddress@domain.com")
name = match[1]
domain = match[2]

Aqui, os parênteses na expressão regular marcar uma captura de grupo, assim você pode ver exatamente o QUE os dados que você combinados, então você pode fazer o processamento adicional.

Esta é apenas a ponta do iceberg...há muitas coisas diferentes que você pode fazer em uma expressão regular que faz processamento de texto MUITO fácil.

Outras dicas

Expressões regulares (ou Regex) são utilizados para a correspondência de padrões em seqüências de caracteres.Assim, você pode puxar para fora todos os endereços de e-mail a partir de um pedaço de texto, uma vez que segue um padrão específico.

Em alguns casos, as expressões regulares são fechados na frente-barras e após a segunda barra são colocados opções, tais como a maiúsculas e minúsculas.Aqui está uma boa :)

/(bb|[^b]{2})/i

Falei nele pode-se ler "2 ser ou não ser 2".

A primeira parte são (entre parênteses), eles são divididos pelo pipe | caractere que equivale a uma instrução ou então (a|b) corresponde a "a" ou "b".A primeira metade do canalizado área corresponde a "bb".A segunda metade do nome eu não sei, mas é que os colchetes, que corresponde a nada que é não "b", que é por isso que existe um teto símbolo aí (termo técnico) lá.A squiggly entre parênteses correspondem a uma contagem das coisas antes delas, no caso dois personagens que não são "b".

Após a segunda é um "eu" que se torna sensível a maiúsculas e minúsculas.Utilizar o início e o fim barras é ambiente específico, às vezes, fazer e às vezes não.

Dois links que eu acho que você vai achar útil para isso são

  1. regular-expressions.info
  2. Wikipédia - expressão Regular

Mais legal expressão regular nunca:

/^1?$|^(11+?)\1+$/

Ele testa se um número é primo.E ele funciona!!

N. B.:para fazê-lo funcionar, um pouco de set-up é necessária;o número que queremos testar tem que ser convertida em uma seqüência de caracteres "1"primeiro, em seguida, podemos aplicar a expressão para testar se a string não não conter um número primo de "1"s:

def is_prime(n)
  str = "1" * n
  return str !~ /^1?$|^(11+?)\1+$/ 
end

Há um detalhadas e muito acessível explicação sobre a Avinash Meetoo do blog.

Se você quiser saber mais sobre expressões regulares, eu recomendo Mastering Regular Expressions.Vai toda a maneira a partir de conceitos muito básicos, todo o caminho até a falar sobre como os diferentes mecanismos de trabalho por baixo.Os 4 últimos capítulos também dá um capítulo dedicado a cada um dos PHP, .Net, Perl e Java.Eu aprendi muito com ele, e ainda usá-lo como uma referência.

Se você está apenas começando com expressões regulares, eu recomendo uma ferramenta como O Regex Coach:

http://www.weitz.de/regex-coach/

também ouvi coisas boas sobre RegexBuddy:

http://www.regexbuddy.com/

Como você deve saber, a Oracle agora tem expressões regulares: http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/rischert_regexp_pt1.html.Eu tenho usado a nova funcionalidade de algumas consultas, mas não foi tão útil quanto em outros contextos.A razão, creio eu, é que expressões regulares são os mais adequados para encontrar dados estruturados enterrado dentro de dados não estruturados.

Por exemplo, eu poderia usar uma expressão regular para encontrar Oracle mensagens que são recheadas no arquivo de log.Não é possível saber de onde as mensagens são--só que eles se parecem.Assim, uma expressão regular é a melhor solução para o problema.Quando você trabalha com um banco de dados relacional, os dados são geralmente pré-estruturada, para um regex não brilha em que contexto.

Uma expressão regular (regex ou regexp para o short) é um especial de seqüência de caracteres de texto para descrever um padrão de pesquisa.Você pode pensar em expressões regulares como curingas em esteróides.Você provavelmente está familiarizado com o curinga notações tais como *.txt para localizar todos os arquivos de texto em um gerenciador de arquivos.A regex equivalente é .*\.txt$.

Um grande recurso para expressões regulares: http://www.regular-expressions.info

Esses RE são específicas para o Visual Studio e C++, mas descobri-las úteis às vezes:

Encontrar todas as ocorrências de "routineName" com não-padrão de parâmetros passados:

routineName\(:a+\)

Por outro lado para encontrar todas as ocorrências de "routineName" com apenas padrões: routineName\(\)

Para encontrar o código ativado (ou desativado) em uma compilação de depuração:

\#se._DEBUG*

Note que isto irá pegar todas as variantes:ifdef, se definido, ifndef, se !definido

Validação de senhas fortes:

Este vai validar uma senha com um comprimento de 5 a 10 caracteres alfanuméricos, com pelo menos uma letra maiúscula, uma minúscula e um dígito:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top