Referência – O que esta regex significa?

O que é isso?

Esta é uma coleção de perguntas e respostas comuns. Este também é um Wiki da Comunidade, então todos são convidados a participar para mantê-lo.

Por que é isso?

regex está sofrendo de give me ze code tipo de give me ze code de perguntas e respostas pobres, sem explicação. Esta referência destina-se a fornecer links para Q & A de qualidade.

Qual é o escopo?

Esta referência destina-se aos seguintes idiomas: php , perl , javascript , python , ruby , java , .net .

Isso pode ser muito amplo, mas esses idiomas compartilham a mesma syntax. Para resources específicos, há a tag da linguagem por trás, por exemplo:

  • O que são expressões regulares Grupos de Equilíbrio? .líquido

   

Perguntas frequentes sobre expressões regulares de estouro de pilha


Tutoriais on-line

  • RegexOne
  • Informações sobre expressões regulares

Quantificadores

  • Zero ou mais: * : ganancioso , *? : relutante , *+ : possessivo
  • Um ou mais: + : ganancioso , +? : relutante , ++ : possessivo
  • ? : opcional (zero ou um)
  • Intervalos mínimo / máximo (tudo incluído): {n,m} : entre n e m , {n,} : n-or-mais , {n} : exatamente n
  • Diferenças entre ganancioso, relutante (também conhecido como “preguiçoso”, “ungreedy”) e quantificador possessivo:
    • Quantificadores ávidos x relutantes vs. possessivos
    • Debate aprofundado sobre as diferenças entre gananciosos e não-gananciosos
    • Qual a diferença entre {n} e {n}?
    • Alguém pode me explicar Quantificadores Possessivos? php , perl , java , ruby
    • Emulando quantificadores possessivos
    • Referências de não estouro de pilha: do Oracle , regular-expressions.info

Classes de Personagem

  • Qual é a diferença entre colchetes e parênteses?
  • [...] : qualquer caractere, [^...] : negado / qualquer caractere, mas
  • [^] corresponde a qualquer caractere, incluindo novas linhas javascript
  • [\w-[\d]] / [az-[qz]] : define subtração .net , xml-schema , xpath , JGSoft
  • [\w&&[^\d]] : definir java de intersecção , ruby 1.9+
  • [[:alpha:]] : classs de caracteres POSIX
  • Por que [^\\D2] , [^[^0-9]2] , [^2[^0-9]] obtêm resultados diferentes em Java? Java
  • Forma abreviada:
    • Dígito: \d : dígito , \D : dígito não
    • Caractere do Word (letra, dígito, sublinhado): \w : caractere de palavra , \W : caractere sem palavra
    • Espaço em branco: \s : espaço em branco , \S : espaço não em branco
  • Categorias Unicode ( \p{L}, \P{L} , etc.)

Sequências de Escape

  • Espaço em branco horizontal: \h : espaço ou tabulação , \t : tab
  • Novas linhas:
    • \r , \n : retorno de carro e avanço de linha
    • \R : newline genérico php
  • Sequências de espaço em branco negativas: \H : caractere de espaço em branco não horizontal, \V : caractere de espaço em branco não vertical, \N : caractere de feed de linha não pcre php5 java-8
  • Outro: \v : guia vertical , \e : o caractere de escape

Âncoras

  • ^ : início da linha / input , \b : limite da palavra e \B : limite sem palavra , $ : fim da linha / input
  • \A : início da input, \Z : fim da input php , perl , ruby
  • \z : o final da input ( \Z em Python) .net , php , pcre , java , ruby , icu , swift , objective-c
  • \G : início da correspondência php , perl , ruby

(Veja também “Informações Específicas de Sabor → Java → As Funções no Matcher “)

Grupos

  • (...) : grupo de captura , (?:) : grupo sem captura
    • Por que meu grupo de captura repetitivo captura apenas a última partida?
  • \1 : backreference e referência do grupo de captura, $1 : referência do grupo de captura
    • Qual o significado de um número após uma barra invertida em uma expressão regular?
    • \g<1>123 : Como seguir um grupo de captura numerado, como \1 , com um número ?: python
  • O que significa um subpadrão (?i:regex) ?
  • O que significa o ‘P’ em (?Pregexp) ?
  • (?>) : grupo atômico ou grupo independente , (?|) : reset de ramificação
    • Equivalente de redefinição de filial em .NET / C # .net
  • Grupos de captura nomeados:
    • Referência geral do grupo de captura nomeado em regular-expressions.info
    • java : (?regex) : Visão geral e regras de nomenclatura (links de não estouro de pilha)
    • Outras linguagens: (?Pregex) python , (?regex) .net , (?regex) perl , (?Pregex) e (?regex) php

Lookarounds

  • Lookaheads: (?=...) : positivo , (?!...) : negativo
  • Lookbehinds: (?< =...) : positivo , (?< !...) : negativo (não suportado pelo javascript )
  • Lookbehind limites em:
    • Lookbehinds precisam ser php , perl , python , ruby de comprimento constante
    • Lookarounds de tamanho limitado {0,n} java
    • Lookbehinds de tamanho variável são permitidos .net
  • Lookbehind alternativas:
    • Usando \K php , perl ( Flavors que suportam \K )
    • Módulo de regex alternativo para Python Python
      • O jeito hacker
      • Equivalentes lookbehind de JavaScript negativo External link

Modificadores

  • A maioria dos sabores: g : global , i : sem distinção entre maiúsculas e minúsculas , u : unicode , x : sem espaços em branco
  • c : posição atual perl e : expressão php perl o : uma vez ruby
  • m : multiline php perl python javascript .net java , m : (não) multilinhas ruby
  • s : linha única (não suportada por javascript ou ruby ), s javascript
  • S : estudo php U : ungreedy php r
  • Como converter preg_replace e para preg_replace_callback?
  • Quais são os modificadores inline?
  • O que é '? -Mix' em uma expressão regular em Ruby

De outros:

  • | : operador de alternância (OR) . : qualquer caractere , [.] : caractere de ponto literal
  • Quais caracteres especiais devem ser escapados?
  • Verbos de controle ( php e perl ): (*PRUNE) , (*SKIP) , (*FAIL) e (*F)
    • Apenas php : (*BSR_ANYCRLF)
  • Recursão ( php e perl ): (?R) , (?0) e (?1) , (?-1) , (?&groupname)

Tarefas comuns

  • Obter uma string entre duas chaves: {...}
  • Corresponde (ou substitua) um padrão, exceto nas situações s1, s2, s3 ...
  • Como faço para encontrar todos os IDs de vídeos do YouTube em uma string usando um regex?
  • Validação:
    • Internet: endereços de e-mail , URLs (host / port: regex e alternativas não-regex ), senhas
    • Numérico: um número , intervalos min-max (como 1-31) , números de telefone , data
    • Analisando HTML com regex: Consulte "Informações gerais> Quando não usar o Regex"

Regex-Fu avançado

  • Cordas e números:
    • Expressão regular para corresponder a uma linha que não contém uma palavra?
    • Como esse padrão PCRE detecta palíndromos?
    • Corresponder cadeias cujo comprimento é um quarto poder
    • Como esta regex encontra números triangulares?
    • Como determinar se um número é primo com regex?
    • Como combinar o caractere do meio em uma string com regex?
  • De outros:
    • Como podemos combinar um ^ nb ^ n com o Java regex?
    • Corresponder colchetes nesteds
      • Usando um padrão recursivo php , perl
      • Usando grupos de balanceamento
    • Correspondência de regex “vertical” em uma “imagem” ASCII
    • Lista de questões Regex altamente votadas no Code Golf
    • Como fazer dois quantificadores repetem o mesmo número de vezes?
    • Uma expressão regular impossível de corresponder: (?!a)a
    • Corresponder / excluir / replace this exceto nos contextos A, B e C
    • Corresponder colchetes nesteds com regex sem usar grupos de recursion ou balanceamento?

Informações Específicas do Sabor

(Exceto para aqueles marcados com * , esta seção contém links de não estouro de pilha.)

  • Java
    • Documentação oficial: Padrão Javadoc , tutorial de expressões regulares do Oracle
    • As diferenças entre as funções em java.util.regex.Matcher :
      • matches() ): A correspondência deve ser ancorada tanto para início de input quanto fim
      • find() ): Uma correspondência pode estar em qualquer lugar na string de input (substrings)
      • lookingAt() : A correspondência deve ser ancorada somente para input
      • (Para âncoras em geral, veja a seção "Âncoras")
    • As únicas funções java.lang.String que aceitam expressões regulares: matches(s) , replaceAll(s,s) , replaceFirst(s,s) , split(s) , split(s,i)
    • * Uma discussão (opinativa e detalhada) das desvantagens e dos resources ausentes no java.util.regex
  • .LÍQUIDO
    • Como ler um .NET regex com look-ahead, look-behind, capturando grupos e referências de referências misturadas?
  • Documentação oficial:
    • Boost regex engine: Sintaxe geral , syntax Perl (usada por TextPad, Sublime Text, UltraEdit, ... ???)
    • Informações gerais sobre JavaScript 1.5 e object RegExp
    • .LÍQUIDO MySQL Oráculo Perl5 versão 18.2
    • PHP: syntax padrão , preg_match
    • Python: operações de expressão regular , search vs match , como fazer
    • Splunk: terminologia e syntax regex e comando regex
    • Tcl: syntax regex , manpage , comando regexp
    • Visual Studio Localizar e replace

Informação geral

Os links marcados com * são não-estouro de pilha.

  • Outros resources gerais de documentação: Aprendendo expressões regulares , * Regular-expressions.info , * input na Wikipedia , * RexEgg , Open-Directory Project
  • DFA versus NFA
  • Gerando strings combinando regex
  • Livros: Expressões Regulares Dominantes de Jeffrey Friedl
  • Quando não usar expressões regulares:
    • Algumas pessoas, quando confrontadas com um problema, pensam "eu sei, usarei expressões regulares". Agora eles tem dois problemas. (post de blog escrito pelo fundador do Stack Overflow ) *
    • Não use o regex para analisar o HTML:
      • Não faça Por favor, apenas não
      • Bem, talvez ... se você estiver realmente determinado (outras respostas nesta pergunta também são boas)

Exemplos de regex que podem causar falha no mecanismo de regex

  • Por que essa expressão regular mata o mecanismo regex do Java?

Ferramentas: Testadores e Explainers

(Esta seção contém links de não estouro de pilha.)

  • Online (* inclui testador de substituição, + inclui testador de divisão) :

    • Debuggex (também tem um repository de regexes úteis) javascript , python , pcre
    • * Expressões Regulares 101 php , pcre , python , javascript
    • Regex Pal , regular-expressions.info javascript
    • Rubi rubular RegExr Regran de herói do Regex
    • * + regexstorm.net .net
    • * RegexPlanet: Java java , Go go , Haskell haskell , JavaScript javascript , .net dotnet , Perl perl php PCRE php , python python , ruby ruby , XRegExp xregexp
    • freeformatter.com xregexp
    • * + regex.larsolavtorvik.com php PCRE e POSIX, javascript
    • Refle JavaScript javascript ruby
  • Desligada:

    • Microsoft Windows: RegexBuddy (análise), RegexMagic (criação), Expresso (análise, criação, livre)