Quais são boas expressões regulares?

votos
10

Eu tenho trabalhado por 5 anos principalmente em aplicações desktop Java que acessam bancos de dados Oracle e eu nunca ter usado expressões regulares. Agora eu entrar Stack Overflow e eu vejo um monte de perguntas sobre eles; Eu sinto que eu perdi alguma coisa.

Para o que você usa expressões regulares?

PS desculpe pelo meu mau Inglês

Publicado 07/08/2008 em 17:48
fonte usuário
Em outras línguas...                            


9 respostas

votos
7

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 que é uma maneira muito concisa de encontrar uma correspondência em uma string.

Além disso, o uso 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 um grupo de captura, para que você possa ver exatamente o que os dados é que você combinado, para que possa fazer mais processamento.

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

Respondeu 07/08/2008 em 18:02
fonte usuário

votos
7

Expressões Regulares (ou Regex) são utilizados para correspondência de padrões em strings. Assim, você pode retirar todos os endereços de e-mail a partir de um pedaço de texto porque segue um padrão específico.

Em alguns casos, as expressões regulares são colocados frente-barras e depois da segunda barra são opções como caso insensibilidade colocado. Aqui está um bom :)

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

Faladas ele pode ler "2 Ser ou não ser 2".

A primeira parte são as (entre parênteses), eles são divididos pelo tubo | personagem que equivale a um ou instrução para que (a | b) corresponde "a" ou "b". A primeira metade da área canalizada corresponde "bb". O nome do segundo semestre Eu não sei, mas é os colchetes, eles combinam tudo o que é não "b", é por isso que há um símbolo telhado thingie (termo técnico) lá. Os suportes squiggly coincidir com uma contagem das coisas antes deles, neste caso, dois personagens que não são "b".

Após a segunda / é um "i" que o torna insensível caso. Uso das barras de início e fim é ambiente específico, às vezes você faz e às vezes você não faz.

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

  1. regular-expressions.info
  2. Wikipedia - Expressão regular
Respondeu 07/08/2008 em 17:51
fonte usuário

votos
6

Coolest expressão regular que nunca :

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

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

NB: para que ele funcione, é necessário um pouco de set-up; o número que queremos testar tem de ser convertido em uma seqüência de “ 1” s primeiro, então podemos aplicar a expressão para testar se a cadeia 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á uma explicação detailled e muito acessível sobre a blog de Avinash Meetoo .

Respondeu 25/08/2008 em 11:48
fonte usuário

votos
2

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

Respondeu 19/08/2008 em 01:00
fonte usuário

votos
0

Validar senhas fortes :

Este vai validar uma palavra-passe com um comprimento de 5 a 10 caracteres alfanuméricos, com, pelo menos, uma caixa superior, uma caixa baixa e um dígito:

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{5,10}$
Respondeu 17/09/2009 em 10:00
fonte usuário

votos
0

Estes RE de são específicos para Visual Studio e C ++, mas eu encontrei-los úteis em tempos:

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

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:

\#E se. _DEPURAR*

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

Respondeu 25/08/2008 em 12:37
fonte usuário

votos
0

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 em algumas consultas, mas não foi tão útil como em outros contextos. A razão, creio eu, é que as expressões regulares são os mais adequados para encontrar dados estruturados enterrados dentro de dados não estruturados.

Por exemplo, eu poderia usar um regex para encontrar mensagens do Oracle que são enchidos em arquivo de log. Não é possível saber onde as mensagens são - apenas o que eles se parecem. Assim, um regex é a melhor solução para esse problema. Quando você trabalha com um banco de dados relacional, os dados são normalmente pré-estruturado, assim que um regex não brilha nesse contexto.

Respondeu 19/08/2008 em 00:54
fonte usuário

votos
0

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

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

também ouvi coisas boas sobre RegexBuddy:

http://www.regexbuddy.com/

Respondeu 07/08/2008 em 18:10
fonte usuário

votos
0

Uma expressão regular (regex ou regexp para o short) é uma cadeia de texto especial para descrever um padrão de pesquisa. Você pode pensar em expressões regulares como wildcards em esteróides. Você provavelmente está familiarizado com as notações curinga, como *.txtpara encontrar todos os arquivos de texto em um gerenciador de arquivos. A expressão regular equivalente é .*\.txt$.

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

Respondeu 07/08/2008 em 17:50
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more