Ajuda:Expressões regulares

Esta página descreve caracteres especiais, também chamados metacaracteres (assim como sequências destes) usados em expressões regulares que podem ou não ser utilizados nas seguintes páginas:


Outros programas/recursos não abordados especificamente nesta página (mas a mesma pode servir de ajuda):


Nota: nem todos os caracteres especiais se podem usar em qualquer página (ou programa) descrita anteriormente, por isso esta página contém secções de exemplos conforme a página (ver #Exemplos práticos) e a indicação em que páginas funciona na tabela que se segue nas colunas "Spam", "Title", "Salebot" e "Filtro". A sintaxe utilizada pelas extensões do MediaWiki é a PCRE.

Descrição dos caracteres especiais

Caractere especial ou
sequência de caracteres especiais
DescriçãoSpamTitleSalebotFiltro
|A barra vertical significa "ou"; detecta o termo anterior ou posterior. Pode ser combinado com várias barras verticais. A utilização sem ser dentro de parêntesis pode depender do programa/extensão em que é utilizado, ver exemplos seguintes para saber se se pode utilizar.
     sim|não|talvezNeste exemplo deteta "sim", "não" e "talvez"
     muit(o|as)Neste caso detecta "muito" e "muitas"
.qualquer caractere (inclui espaços)
*(0, 1 ou mais) nenhuma, uma ou mais repetições do termo anterior
     .*Repetição (ou não) de qualquer caractere (inclui espaços) uma ou mais vezes.
     (ha)*Repetição (ou não) de "ha" uma ou mais vezes. Deteta "ha", "haha", "hahaha", etc.
     \d*Repetição (ou não) de um dígito uma ou mais vezes. Deteta "3", "823", "5961837254", etc.
     alt\w*Repetição (ou não) de um caractere alfanumérico uma ou mais vezes. Deteta "alto", "alternativa", "super!altamente", etc. mas não quando "alt" é seguido de um dígito como "super!alt1".
+(1 ou mais) uma ou mais repetições do termo anterior. Equivalente a {1,}
?(0 ou 1) Nenhuma ocorrência ou uma do termo anterior, ou seja, o termo anterior é opcional (mas tenta encontrar primeiro uma ocorrência e só depois a ausência). Caso o ? seja colocado após um dos símbolos ? * + ou da expressão {mínimo,máximo} assume primeiro a ausência e só depois a ocorrência.
\Este caractere especial tem duas funções conforme o que lhe segue:
  • é utilizado como caractere de escape, para que se interprete um caractere especial como caractere normal. Por exemplo, a expressão quem\? deteta "quem?" e não "que" e "quem" caso se usasse quem?.
  • é utilizado para uma sequência especial como por exemplo número \d que deteta "número 8", "número 17456", etc. e não "número d" pois o "d" não é um caractere especial para que o "\" seja usado para caractere de escape.
\A
\bRestringe ao início, o meio ou o fim da expressão que antecede ou precede. Por exemplo \bsim deteta "é simplesmente" mas não deteta "assim".
\BQualquer posição do texto desde que não seja no início ou no fim de uma palavra. Por exemplo \Btur\B deteta "altura" mas não deteta "altur". Já \btur\B deteta "turismo" mas não "altura"
\dqualquer dígito (0 a 9)
\Dqualquer caractere que não seja um dígito
\G
\sEspaço em branco
\STudo excepto o espaço
\wqualquer caractere alfanumérico incluindo traço inferior; é o equivalente a [a-z0-9_]
\Wqualquer caractere que não seja alfanumérico, incluindo traço inferior; é o equivalente a [^a-z0-9_]
\z
\Z
\0
\1Pode-se usar \1 \2 \3 \4 \5 \6 \7 \8 \9 para capturar um grupo anterior (dentro de parêntesis). Exemplo (ha)\1{2,} permite detectar "hahaha". Exemplo .*(.)\1{10}.* permite detectar 10 caracteres iguais repetidos. Outro exemplo dois (tigres|esquilos) três \1 deteta "dois tigres três tigres" e "dois esquilos três esquilos", mas não "dois tigres três esquilos".
( )Permite definir um grupo de expressões ou caracteres. Captura também a expressão para referência posterior (ver expressão anterior \1), a não ser que se use como (?: ) que não captura. Os parêntesis também permitem aplicar expressões regulares posteriormente a esse grupo (e não apenas a um caractere) como por exemplo (ha)+
     (forum|site) novoNeste caso usa um elemento comum "novo" para detetar várias expressões como "forum novo" e "site novo"
     (bom){2}Neste caso agrupa "bom" como um só elemento para considerar a repetição que detecta "bombom"
     (muito)? bomNeste caso agrupa "bom" como um só elemento para considerar a ocorrência ou não desse elemento, detentando "muito bom" e "bom"
[ ]Permite especificar os caracteres a detetar
     [abc]Deteta "a", "b" ou "c"
     [0-4]Exemplo para detetar um intervalo de caracteres. Neste caso deteta "1", "2", "3" e "4"
     [a-d]Deteta "a", "b", "c" e "d"
     [0-4a-d]Deteta "1", "2", "3", "4", "a", "b", "c" e "d"
     [a-g-[b-e]]Exemplo para subtração de um conjunto. Neste exemplo significa detetar o intervalo de letras de "a" a "g" excepto o intervalo de letras de "b" a "e". Deteta então "a", "f" e "g". Em princípio esta expressão não funciona.
     [a-z-[aeiou]]Neste caso deteta todas as consoantes (pode ser interpretar a expressão como alfabeto exceto vogais). Em princípio esta expressão não funciona.
     [a-z&&[bdg]]Neste caso deteta todas as letras do alfabeto exceto as letras "b", "d" e "g". Funciona como interseção.
     [-abc]Caso o hífen esteja logo no início é interpretado como tal. No exemplo corresponde ao "hífen", letra "a", "b" e "c"
[^ ]Permite especificar os caracteres a não detetar (negação). Ver também outro uso do caractere ^
     [^abc]qualquer caractere que não seja "a", "b" ou "c"
     [^a-f]qualquer caractere que não seja uma letra do alfabeto entre "a" e "f"; o mesmo que [^abcdef]
     [^0-4]qualquer caractere que não seja um número entre "0" e "4"; o mesmo que [^01234]
{ }Quantificador. Permite especificar o número de vezes que a expressão anterior ocorre, quer o número exacto, quer o mínimo, quer o mínimo e máximo.
     {número}Número exacto de vezes que o elemento anterior se repete
     {mínimo,}Número mínimo de vezes que o elemento anterior se repete
     {mínimo,máximo}Número mínimo e máximo de vezes que o elemento anterior se repete
(?:expressão)Permite definir um grupo de expressões ou caracteres. Não captura o grupo para referência posterior ao contrário de ( )
(?!expressão)Grupo em negação não capturado. Por exemplo muito (?!mais|menos) deteta tudo o que tiver "muito" e não seja seguido pelas palavras "mais" ou "menos" como "muito bom", "muito qualquer", etc.
(?=expressão)
(?<!expressão)
(?<=expressão)
(?>expressão)
\045Código ASCII no sistema octal. Neste exemplo "045" corresponde ao símbolo "%".
\x25Código hexadecimal. Neste exemplo "25" corresponde ao símbolo "%".
\X
\x{25}Semelhante ao anterior mas na sintaxe PCRE para código hexadecimal. Neste exemplo "25" corresponde também ao símbolo "%".
\u0025Código Unicode. Neste exemplo "0025" corresponde ao símbolo "%". Em princípio não é possível usar esta expressão nas páginas do MediaWiki. Para isso use o \x{25} ?
\p{nome da classe}Caracteres de um determinada classe. Por exemplo, \p{IsHebrew} em que "IsHebrew" é o nome da classe Unicode para as letras da língua hebraica. Para uma lista completa ver secção desta página #Lista de nomes de classes Unicode
\P{nome da classe}Caracteres que não sejam da classe definida. É semelhante ao anterior mas em negação.
\p{^nome da classe}Caracteres que não sejam da classe definida. É semelhante a \P{nome da classe} (notar que o "P" está em maiúscula")
# comentárioXPTOUtilizado para comentários. Todo o texto que se encontre após # é interpretado como comentário
(?#comentárioXPTO)Utilizado para comentários, normalmente dentro das próprias expressões regulares. Todo o texto que se encontre entre os parênteses não é considerado uma expressão regular. Por exemplo muitos?(?#comentárioXPTO)tigre deteta "muitostigre" e "muitotigre"
^ Início do texto. Por exemplo "^34" deteta "34" num texto que comece com "34 hs gj ada hs". Não confundir com \b que tem uma funcionalidade diferente. [1]
$Fim do texto. Por exemplo "34$" deteta "34" num texto que termine com "hs gj ada hs34". Não confundir com \b que tem uma funcionalidade diferente. [1]
(?i:expressão)Utilizado para considerar maiúsculas e minúsculas. Por exemplo, (?i:Meta) corresponde a "Meta", "META", "meta", "MeTa", etc. [2]
(?-i:expressão)Inverso do anterior. Por exemplo (?i:sím)(?-i:bolo) deteta "SIMbolo" e "símbolo" mas não "símBOLO"
\Qexpressão\EInterpreta literalmente a expressão como caracteres.
     \Q+({\EInterpreta literalmente a expressão como caracteres. Deteta "+({"
(expressão)(?(grupo)sim|não)
(expressão)(?(grupo)sim)

Caractere de escape

Quando se quer que o programa que usa expressões regulares interprete um caractere especial como um caractere normal (ou literal) é necessário usar um caractere de escape \ antes de cada caractere especial. Por exemplo, para se detetar o texto muito + que? é necessário usar a expressão muito \+ que\? para que se interprete literalmente como texto e não expressão regular. Notar que para cada caractere especial é necessário usar o caractere de escape, mesmo que estejam seguidos. Por exemplo, em +?* deve-se usar \+\?\* para interpretar como caracteres normais.

  • nas páginas MediaWiki:Titleblacklist e MediaWiki:Spam-blacklist os símbolos ^ \ * . ( ) { } [ ] $ + - | ? < > para serem interpretados literalmente têm de ser colocados após \ Por exemplo, para bloquear o termo exato muito+mais\ deve-se usar a expressão muito\+mais\\ de forma a que o símbolo + e \não sejam interpretados como uma expressão regular mas sim como caracteres. Isto não se aplica quando os símbolos \ * . + ? estão imediatamente a seguir a [ ou imediatamente antes de ] como por exemplo [-!€]
  • na página MediaWiki:Titleblacklist o símbolo / tem de ser colocado da seguinte forma \/


Exemplos práticos

Notas:

  • Nos exemplos mostrados não se considera a diferença entre maiúsculas e minúsculas, pois o MediaWiki usa por defeito essas variações. Ou seja, a expressão raios bloqueia "Raios", "raios", "RAIOS", "RaIoS", etc.
  • Nos exemplos utiliza-se muito as expressões entre \b para mostrar apenas alguns exemplos na coluna "Palavras detectadas"

MediaWiki:Titleblacklist

Exemplodetetanão detetaExplicação
viado"viado"
"viados"
"aviado"
"aviador"
"um viado de", etc.
"v1ado", etcbloqueia todas as palavras que começam, terminem ou tenham no meio a expressão "viado". Notar que neste caso bloqueia também expressões válidas como "aviador". Deve-se ter algum cuidado com este caso pois pode bloquear muitas palavras válidas, principalmente quando a palavra/expressão a bloquear for muito curta. A título de exemplo vi iria bloquear ainda mais páginas ao contrário de montes de viados que não originaria problemas pois provavelmente não deve haver um título de uma página ou conta de usuário válida com essas palavras. Teoricamente (a confirmar) obtêm-se os mesmos resultados com .*viado.*
\bviado"viado"
"viados"
"viadores"
"viadonte", etc.
"aviado"
"mesmoviado", etc
Exemplo semelhante ao anterior, mas que bloqueia apenas as palavras que começam com viado
viado\b"viado"
"aviado"
"wq12wprviado", etc.
"viados", etcBloqueia apenas as palavras que terminam com viado
\bviado\b"viado""umviado"
"viadão"
Bloqueia apenas a palavra viado
p.ta "pata"
"pota"
"aap1taa"
"computador", etc.
"pta", etcSemelhante ao anterior, aceita qualquer caractere (apenas 1) entre p e ta. Este exemplo nunca deve ser utilizado desta forma pois deteta demasiadas palavras válidas.
puta.*pariu "puta que pariu"
"puta pariu"
"aputa de 1parius sem",
"computador que comparium" etc.
"pariu puta"
"putapariu", etc
Detecta a palavra "puta" e "pariu" quando estas estão seguidas. Tel algum cuidado com este exemplo, pode eventualmente detectar palavras corretas.
\bputa\b.*\bpariu\b "puta que pariu"
"puta pariu", etc
"putapariu"
"umputa pariu", etc
Semelhante ao anterior mas só detecta as palavras "puta" e "pariu" quando estão isoladas
\bmi?erda\b "mierda"
"merda"
"m3rda"
"merdices"
"umamerda", etc
O ? neste caso indica que a letra anterior i é opcional.
\bfix(e|ola|ix)\b "fixe"
"fixola"
"fixix"
"fixone"
"fix3"
"fix", etc
Utilizado para palavras com variantes mas com uma parte em comum.
\bbarda[ ]?merda\b "barda merda"
"bardamerda"
"barda-merda"
"barda merda", etc
Para tornar os espaços opcionais, estes têm de ser colocados entre colchetes.
[0-9]º ano "meu 1º ano de"
"teu10º anode", etc.
"9ºano"
"9o ano", etc
Caso especial que considera os algarismos entre 0 e 9. É uma forma simplificada de obter o mesmo resultado com [0123456789]º ano ou (0|1|2|3|4|5|6|7|8|9)º ano
\b1?[0-9]º ano\b "meu 1º ano de"
"teu 10º ano de", etc.
"meu1º ano de"
"10º anode", etc.


MediaWiki:Spam-blacklist

ExemploEndereços detetadosExplicação
\bexemplo\.com"www.exemplo.com"
"sv1.exemplo.com/34/pag.html", etc.
Exemplo mais comum que bloqueia todas as páginas de um domínio.
\bexemplo\.com/game/"www.exemplo.com/game/"
"sv1.exemplo.com/game/pag.html", etc.
Exemplo para bloquear apenas determinados directórios de um domínio e não todas as páginas desse domínio.
\bexemplo\.(?:com|net|org|pt|com\.br)\b"www.exemplo.com"
"www.exemplo.pt"
"www.exemplo.com.br"
"sv1.exemplo.pt/pag.html", etc.
Para bloquear vários domínios com o mesmo nome.
\bserver\d\.exemplo\.com\b"server1.exemplo.com"
"server4.exemplo.com"
"server9.exemplo.com/pag.htm", etc.
Neste caso o \d corresponde a qualquer dígito (0 a 9).
casino-online"casino-online.com"
"newcasino-onlines.pt"
"www.w3.com/casino-online1.htm", etc.
Bloqueia todos os URL que contenham "casino-online". Ao usar este método deve-se ter em conta que bloqueia também directórios de sites.
@exemplo.com "info@exemplo.com"
"qual@exemplo.com", etc.
72\.232\.68\.234
\bgoogle\..{1,5}/cse\b
exemplo[0-9a-z-]*\.com
www\.google\.com/search\?source=ig&hl=en&q=music\+education\+by\+color
upload\.wikimedia\.org/.*XRumer.screenshot\.gif


MediaWiki:Spam-whitelist

ExemploExplicação
\bwww\.exemplo\.org\b Desbloqueia apenas a página principal do site.
\bwww\.exemplo\.org/results.html\b Desbloqueia apenas a página "www.exemplo.org/results.html" desse site.
\bwww\.exemplo\.org/results/\b Desbloqueia apenas o diretório "www.exemplo.org/results/" e todas as subpáginas que estejam nesse diretório.


Lista de nomes de classes Unicode

As seguintes listas podem ser utilizadas de várias formas:

  • \p{nome da classe}
  • \P{nome da classe}
  • \p{^nome da classe}
  • \P{^nome da classe}

Também podem ser combinadas:

  • \p{L|P} (a confirmar)
  • [\p{L} \p{P}]

A lista seguinte "Propriedades" pode ser utilizada de duas formas: \p{Lu} ou \pLu''' com as quais se obtem o mesmo resultado.

Propriedades

NomeNome alternativoDescrição
LLetterTodas as letras
LuUppercase_LetterTodas as letras maiúsculas
LlLowercase_LetterTodas as letras minúsculas
LtTitlecase_LetterQuando a primeira letra de uma palavra está em maiúscula.
LmModifier_Letter
LoOther_Letter
L&Letter&O mesmo que Ll, Lu, ou Lt; ou seja "Todas as letras maiúsculas", "todas as letras minúsculas" e "Quando a primeira letra de uma palavra está em maiúscula"
NNumberTodos os números
NdDecimal_Digit_NumberDígito decimal. Para \p(Nd} equivale a usar \d Para \P(Nd} equivale a usar \D
NlLetter_Number
NoOther_Number
PPunctuationTodos os sinais de pontuação (ver lista de alguns em Predefinição:Pontuação)
PcConnector_Punctuation
PdDash_Punctuationtraços (incluindo hífen)
PiInitial_Punctuation
PfFinal_Punctuation
PsOpen_PunctuationToda a pontução de abertura como ( [ {
PeClose_PunctuationToda a pontução de fecho como ) ] }
PoOther_Punctuation
SSymbolSímbolos como os monetários, matemáticos, etc.
ScCurrency_SymbolTodos os símbolos monetários como $ € £ ¢ ¥ etc. (ver en:Currency sign)
SkModifier_Symbol
SmMath_SymbolTodos os símbolos matemáticos
SoOther_Symbol
MMarkTodos os diacríticos
MnNon_Spacing_Mark
McSpacing_Combining_Mark
MeEnclosing_Mark
ZSeparatorEspaços em branco
ZsSpace_SeparatorEspaço
ZlLine_Separator
ZpParagraph_Separator
COther
CcControl
CfFormat
CnUnassigned
CoPrivate_Use
CsSurrogate


Sistema de escrita


Por sistema de escrita entenda-se os caracteres utilizados numa determinada língua. É diferente dos blocos descritos na tabela seguinte na medida em que abarca símbolos de vários blocos Unicode.Por exemplo Latin inclui os blocos Unicode:

  • BasicLatin
  • Latin-1Supplement
  • LatinExtendedA
  • LatinExtendedB
  • LatinExtendedAdditional
  • Diacritics


NomeDescrição
Arabic
Armenianen:List of Unicode characters#Armenian
Balinese
Bengali
Bopomofo
Braille
Buginese
Buhid
CanadianAboriginal
Cham
Cherokee
Common
Coptic
Cuneiform
Cypriot
CyrillicAlfabeto cirílico
Deseret
Devanagari
Ethiopic
Georgian
Glagolitic
Gothic
Greek
Gujarati
Gurmukhi
Han
Hangul
Hanunoo
Hebrewen:List of Unicode characters#Hebrew
Hiragana
Inherited
Kannada
Katakana
Kharoshthi
Khmer
Lao
Latin
Limbu
LinearB
Malayalam
Mongolian
Myanmar
NewTaiLue
Nko
Ogham
OldItalic
OldPersian
Oriya
Osmanya
PhagsPa
Phoenician
Runic
Shavian
Sinhala
Sundanese
SylotiNagri
Syriac
Tagalog
Tagbanwa
TaiLe
Tamil
Telugu
Thaana
Thai
Tibetan
Tifinagh
Ugaritic
Yi


Blocos

NomeDescrição
InAlphabeticPresentationForms
InArabic
InArabicPresentationFormsA
InArabicPresentationFormsB
InArabicSupplement
InArmenianen:List of Unicode characters#Armenian
InArrows
InBalinese
InBasicLatin
InBengali
InBlockElements
InBopomofo
InBopomofoExtended
InBoxDrawing
InBraillePatterns
InBuginese
InBuhid
InCham
InCherokee
InCJKCompatibility
InCJKCompatibilityForms
InCJKCompatibilityIdeographs
InCJKRadicalsSupplement
InCJKStrokes
InCJKSymbolsandPunctuation
InCJKUnifiedIdeographsen:List of CJK Unified Ideographs
InCJKUnifiedIdeographsExtensionA
InCombiningDiacriticalMarks
InCombiningDiacriticalMarksforSymbols
InCombiningDiacriticalMarksSupplement
InCombiningHalfMarks
InCombiningMarksforSymbols
InControlPictures
InCoptic
InCurrencySymbols
InCyrillicAlfabeto cirílico
InCyrillicExtendedA
InCyrillicExtendedB
InCyrillicSupplementen:List of Unicode characters#Cyrillic Supplement
InDevanagari
InDingbats
InEnclosedAlphanumerics
InEnclosedCJKLettersandMonths
InEthiopic
InEthiopicExtended
InEthiopicSupplement
InGeneralPunctuation
InGeometricShapes
InGeorgian
InGeorgianSupplement
InGlagolitic
InGreek
InGreekExtended
InGreekandCopticen:List of Unicode characters#Greek and Coptic
InGujarati
InGurmukhi
InHalfwidthandFullwidthForms
InHangulCompatibilityJamo
InHangulJamo
InHangulSyllables
InHanunoo
InHebrewen:List of Unicode characters#Hebrew
InHighPrivateUseSurrogates
InHighSurrogates
InHiragana
InIdeographicDescriptionCharacters
InIPAExtensionsen:IPA Extensions unicode block
InIdeographicDescriptionCharacters
InKanbun
InKangxiRadicals
InKannada
InKatakana
InKatakanaPhoneticExtensions
InKayahLi
InKhmer
InKhmerSymbols
InLao
InLatin-1Supplementen:Latin-1 Supplement unicode block
InLatinExtendedAen:Latin Extended-A unicode block
InLatinExtendedBen:Latin Extended-B unicode block
InLatinExtendedC
InLatinExtendedD
InLatinExtendedAdditional
InLepcha
InLetterlikeSymbols
InLimbu
InLowSurrogates
InMalayalam
InMathematicalOperators
InMiscellaneousMathematicalSymbolsA
InMiscellaneousMathematicalSymbolsB
InMiscellaneousSymbolsen:Miscellaneous Symbols
InMiscellaneousSymbolsandArrows
InMiscellaneousTechnical
InModifierToneLetters
InMongolian
InMyanmar
InNewTaiLue
InNKo
InNumberForms
InOgham
InOlChiki
InOpticalCharacterRecognition
InOriya
InPhagspa
InPhoneticExtensions
InPhoneticExtensionsSupplement
InPrivateUse
InPrivateUseArea
InRejang
InRunic
InSaurashtra
InSinhala
InSmallFormVariants
InSpacingModifierLettersen:List of Unicode characters#Spacing Modifier Letters
InSpecials
InSundanese
InSuperscriptsandSubscripts
InSupplementalArrowsA
InSupplementalArrowsB
InSupplementalMathematicalOperators
InSupplementalPunctuation
InSylotiNagri
InSyriac
InTagalog
InTagbanwa
InTaiLe
InTamil
InTelugu
InThaana
InThai
InTibetan
InTifinagh
InUnifiedCanadianAboriginalSyllabics
InVai
InVariationSelectors
InVerticalForms
InYijingHexagramSymbols
InYiRadicals
InYiSyllablesen:List of Unicode characters in the Yi syllables block


Testar expressões regulares

Se encontrarem sites ou programas úteis coloquem aqui. De preferência não comerciais, sob uma licença livre e em português.

Sítios (on-line)

SiteLínguaLicençaRequisitosFuncionalidadesTem "ajudas"?ExpReg compatíveis?[3]
http://www.gskinner.com/RegExr/InglêsJava, Flash
http://www.regexp.com.brPortuguês e InglêsBY-NC-SA 3.0Java
http://regexpal.comInglêsLGPLJava
http://regex.larsolavtorvik.com/#pcreInglêsJava
http://regex.powertoy.orgInglêsGPLJava
http://cuneytyilmaz.com/prog/jrx/InglêsGPLJava
http://www.nregex.com/nregex/InglêsJava
http://www.myregextester.comInglêsJava
http://tools.lymas.com.br/regexp_br.phpPortuguêsJava
http://www.idsklijnsma.nl/regexps/InglêsJava
http://www.regextester.comInglêsCC 2.5Java


Programas

NomePlataformaLínguaLicençaFuncionalidadesTem "ajudas"?ExpReg compatíveis?[3]Aceita texto de entrada longo?[4]Principal vantagem
https://addons.mozilla.org/en-US/firefox/addon/2077n/a (Firefox)Português (parcialmente)GPL v2 Extra (add-on) para o Firefox
RegulatorWindowsInglêsLGPL [5]
regexbuilderWindowsInglêsGPL Bastante simples
reggyMac OSXInglêsGPL v2
jregexptesterLGPL v2.1


Notas

Ver também

Ligações externas