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::
\H
Caractere de espaço em branco não horizontal,: Caractere de espaço em branco\V
nã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\Z
entrada ,: fim da entrada php , perl , ruby\z
: o final da entrada (\Z
em 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$1
referê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 perle
: expressão php perlo
: 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 ),s
solução alternativa para javascriptS
: estudo phpU
: 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,
this
exceto 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.String
funçõ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
- PHP: sintaxe de padrão ,
preg_match
- Python: operações de expressão regular ,
search
vsmatch
, como fazer - Splunk: terminologia e sintaxe regex e comando regex
- Tcl: sintaxe regex , página de manual ,
regexp
comando - 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 .
- 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
- * + 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- * + 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)