Referência - o que significa este regex?
O que é isso?
Esta é uma coleção de perguntas e respostas comuns. Este também é um Wiki da comunidade, então todos estão convidados a participar de sua manutenção.
Por que é isso?
regex está sofrendo de perguntas do tipo código ze e respostas ruins sem nenhuma explicação. Esta referência tem como objetivo fornecer links para perguntas e respostas de qualidade.
Qual é o escopo?
Esta referência se destina às seguintes linguagens: php , perl , javascript , python , ruby , java , .net .
Isso pode ser muito amplo, mas essas linguagens compartilham a mesma sintaxe. Para recursos específicos, há a tag do idioma por trás dele, por exemplo:
- O que são grupos de equilíbrio de expressão regular? .internet
Respostas
Perguntas frequentes sobre expressões regulares do Stack Overflow
Veja também muitas dicas gerais e links úteis na página de detalhes da tag regex .
Tutoriais online
Quantificadores
- Zero-ou-mais:
*: ávido ,*?: relutantes ,*+: possessivo - One-ou-mais:
+: ganancioso ,+?: relutante ,++: possessivo ?: opcional (zero ou um)- Min / max gamas (tudo incluído):
{n,m}: entre n & amp; m ,{n,}n-ou-mais ,{n}: n exactamente - Diferenças entre o quantificador ganancioso, relutante (também conhecido como "preguiçoso", "mesquinho") e possessivo:
- Quantificadores gananciosos vs. relutantes vs. possessivos
- Discussão aprofundada sobre as diferenças entre gananciosos e não gananciosos
- Qual é a diferença entre
{n}e{n}? - Alguém pode me explicar os Quantificadores Possessivos? php , perl , java , ruby
- Emulando quantificadores possessivos .net
- Referências do Non-Stack Overflow: do Oracle , regular-expressions.info
Classes de personagens
- Qual é a diferença entre colchetes e parênteses?
[...]: qualquer caractere[^...],: negado / qualquer caractere, exceto[^]corresponde a qualquer caractere, incluindo novas linhas javascript[\w-[\d]]/[a-z-[qz]]: definir subtração .net , xml-schema , xpath , JGSoft[\w&&[^\d]]: definir interseção java , ruby 1.9+[[:alpha:]]: Classes de caracteres POSIX- Por que
[^\\D2],[^[^0-9]2],[^2[^0-9]]obter resultados diferentes em Java? Java - Forma abreviada:
- Dígitos:
\d: digit ,\D: non dígitos - Caractere de palavra (Letter, dígito, sublinhado):
\w: caractere de palavra ,\W: caractere não-palavra - Espaços em branco:
\s: espaço em branco ,\S: não-espaço em branco
- Dígitos:
- Categorias Unicode (
\p{L}, \P{L}, etc.)
Sequências de Escape
- Espaço em branco horizontal:
\h: espaço-ou-guia ,\t: tab - Newlines:
- Sequências de espaço em branco negadas::
\HCaractere de espaço em branco não horizontal,: Caractere de espaço em branco\Vnão vertical\N,: Caractere de alimentação de linha não pcre php5 java-8 - Outros:
\v: tabulação vertical ,\e: o caractere de escape
Âncoras
^: o início da linha de entrada / ,\b: limite de palavra, e\B: não limite de palavra ,$: fim da linha de entrada /\A: início da\Zentrada ,: fim da entrada php , perl , ruby\z: o final da entrada (\Zem Python) .net , php , pcre , java , ruby , icu , swift , objetiva-c\G: início da correspondência php , perl , ruby
(Consulte também "Informações específicas do sabor → Java → As funções em Matcher")
Grupos
(...): grupo de captura ,(?:): grupo de não-captura\1: referência anterior e$1referência do grupo de captura,: referência do grupo de captura- O que significa um subpadrão
(?i:regex)? - O que significa o 'P' em
(?P<group_name>regexp)? (?>): grupo atômica ou grupo independente ,(?|): redefinição de ramo- Grupos de captura nomeados:
- Nome geral de referência de grupo de captura em
regular-expressions.info - java :
(?<groupname>regex): Visão geral e regras de nomeação (ligações não-Stack Overflow) - Outros idiomas: python , .net , perl , e php
(?P<groupname>regex)(?<groupname>regex)(?<groupname>regex)(?P<groupname>regex)(?<groupname>regex)
- Nome geral de referência de grupo de captura em
Lookarounds
- Lookaheads:
(?=...): positivo ,(?!...): negativo - Visões traseiras:
(?<=...): positivo ,(?<!...): negativo (não suportado pelo javascript ) - Olhe para trás dos limites em:
- Procure alternativas:
Modificadores
- A maioria dos sabores:
g: global ,i: case-insensitive ,u: unicode ,x: espaço em branco estendido c: posição atual perl
e: expressão php perl
o: uma vez rubim: várias linhas php perl python javascript .net java ,m: (não) multilinha rubys: linha única (não compatível com javascript ou ruby ),ssolução alternativa para javascriptS: estudo php
U: ungreedy php r- Como converter preg_replace e em preg_replace_callback?
- O que são modificadores embutidos?
- O que é '? -Mix' em uma expressão regular Ruby
De outros:
|: alternância operador (OR) ,.: qualquer personagem ,[.]: caractere ponto literal- Quais caracteres especiais devem ser escapados?
- Verbos de comando ( php e perl ):
(*PRUNE),(*SKIP),(*FAIL)e(*F)- somente php :
(*BSR_ANYCRLF)
- somente php :
- Recursão ( php e perl ):
(?R),(?0)e(?1),(?-1),(?&groupname)
Tarefas comuns
- Obtenha uma string entre duas chaves:
{...} - Corresponder (ou substituir) um padrão, exceto nas situações s1, s2, s3 ...
- Como encontro todos os IDs de vídeo do YouTube em uma string usando um regex?
- Validação:
- Internet: endereços de e-mail , URLs (host / porta: alternativas regex e não regex ), senhas
- Numérico: um número , intervalos mínimo-máximo (como 1-31) , números de telefone , data
- Analisando HTML com regex: consulte "Informações gerais> Quando não usar Regex"
Regex-Fu avançado
- Strings 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?
- Combine strings cujo comprimento seja uma quarta potência
- Como este 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 Java regex?
- Corresponder colchetes aninhados
- Correspondência de expressão regular “vertical” em uma “imagem” ASCII
- Lista de perguntas regex altamente votadas no Code Golf
- Como fazer dois quantificadores repetirem o mesmo número de vezes?
- Uma expressão regular impossível de corresponder:
(?!a)a - Corresponder / excluir / substituir,
thisexceto nos contextos A, B e C - Combinar colchetes aninhados com regex sem usar recursão ou grupos de balanceamento?
Informações específicas do sabor
(Exceto para aqueles marcados com *, esta seção contém links não Stack Overflow.)
- Java
- Documentação oficial: Pattern Javadoc , tutorial de expressões regulares da Oracle
- As diferenças entre funções em
java.util.regex.Matcher:matches()): A correspondência deve ser ancorada tanto no início quanto no fim da entradafind()): Uma correspondência pode estar em qualquer lugar na string de entrada (substrings)lookingAt(): A correspondência deve ser ancorada apenas no início da entrada- (Para âncoras em geral, consulte a seção "Âncoras")
- As únicas
java.lang.Stringfunções que aceitam expressões regulares:matches(s),replaceAll(s,s),replaceFirst(s,s),split(s),split(s,i) - * Uma discussão (opinativa e) detalhada sobre as desvantagens e os recursos ausentes em
java.util.regex
- .INTERNET
- Documentação oficial:
- Boost regex engine: General syntax , Perl syntax (used by TextPad, Sublime Text, UltraEdit, ... ???)
- Informações gerais de JavaScript 1.5 e objeto RegExp
- .NET
MySQL
Oracle
Perl5 versão 18.2
- PHP: sintaxe de padrão ,
preg_match - Python: operações de expressão regular ,
searchvsmatch, como fazer - Splunk: terminologia e sintaxe regex e comando regex
- Tcl: sintaxe regex , página de manual ,
regexpcomando - Visual Studio Find and Replace
Informação geral
(Os links marcados com *não são links Stack Overflow.)
- Outros recursos de documentação geral: Learning Regular Expressions , * Regular-expressions.info , * Wikipedia entry , * RexEgg , Open-Directory Project
- DFA versus NFA
- Gerando Strings que correspondem ao regex
- Livros: Jeffrey Friedl's Mastering Regular Expressions
- 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. (postagem de blog escrita pelofundador do Stack Overflow ) *
- Não use regex para analisar HTML:
- Não .
Por favor, apenas não
- Bem, talvez ... se você estiver realmente determinado (outras respostas nesta pergunta também são boas)
- Não .
Exemplos de regex que podem fazer com que o mecanismo de regex falhe
Ferramentas: testadores e explicadores
(Esta seção contém links não Stack Overflow.)
Online (* inclui testador de substituição, + inclui testador de divisão) :
- Debuggex (também tem um repositório de regexes úteis) javascript , python , pcre
- * Expressões regulares 101 php , pcre , python , javascript
- Regex Pal , regular-expressions.info javascript
- Rubular ruby
RegExr
Regex Hero dotnet
- * + 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.comxregexp- * + php PCRE e POSIX, javascript
regex.larsolavtorvik.com - Refiddle javascript ruby .net
Desligada:
- Microsoft Windows: RegexBuddy (análise), RegexMagic (criação), Expresso (análise, criação, gratuito)