English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expressão regularÉ uma sequência especial de caracteres, que usa um padrão com uma sintaxe específica para coincidir ou encontrar conjuntos de strings.
A expressão regular é composta por alguns caracteres específicos previamente definidos e suas combinações, formando uma "string de regra", que é usada para expressar uma lógica de filtragem de strings.
Expressão regularA expressão regular, vista literalmente, é um padrão entre barras invertidas ou entre qualquer delimitador após %r, conforme mostrado a seguir:
/padrão/ /padrão/im # Pode especificar opções %r!/usr/local! # Expressão regular com delimitador
#!/usr/bin/ruby line1 = "Cats are smarter than dogs"; line2 = "Dogs also like meat"; if ( line1 =~ /Cats(.*)/ ) puts "Line1 contains Cats" end if ( line2 =~ /Cats(.*)/ ) puts "Line2 contains Dogs" end
O resultado de execução do exemplo acima é:
Line1 contains Cats
A expressão regular pode conter um modificador opcional, que controla vários aspectos do match. O modificador é especificado após o segundo caractere de barra invertida, como mostrado no exemplo acima. A tabela a seguir lista os modificadores possíveis:
Modificadores | descrição |
---|---|
i | Ignorar a capitalização ao coincidir com o texto. |
o | Executar a interpolação #{} apenas uma vez, a expressão regular é avaliada logo no início. |
x | Ignorar espaços em branco, permitindo que símbolos de espaço e comentários sejam inseridos em toda a expressão. |
m | Corresponde a linhas múltiplas, considerando o caractere de nova linha como caractere normal. |
u,e,s,n | Interpreta a expressão regular como Unicode (UTF-8)、EUC、SJIS ou ASCII. Se não for especificado o modificador, considera-se que a expressão regular usa a codificação de origem. |
Da mesma forma que as strings são delimitadas por %Q, o Ruby permite que você use %r como o início de um padrão de expressão regular, seguido por qualquer delimitador. Isso é muito útil ao descrever grandes quantidades de barras invertidas que você não deseja escapar.
# Abaixo, o caractere barra invertida é correspondido sem escapamento %r|/| # Caracteres de flag podem ser correspondidos pela seguinte sintaxe %r[</(.*)>]i
Além dos caracteres de controle,(+ ? . * ^ $ ( ) [ ] { } | \),outros caracteres todos correspondem a si mesmos. Você pode escapar caracteres de controle colocando um backslash antes deles.
A tabela a seguir lista a sintaxe de expressões regulares disponíveis no Ruby.
Padrão | descrição |
---|---|
^ | Corresponde ao início da linha. |
$ | Corresponde ao final da linha. |
. | Corresponde a qualquer caractere simples, exceto o caractere de nova linha. Quando a opção m estiver ativa, também pode correspondente o caractere de nova linha. |
[...] | Corresponde a qualquer caractere simples que esteja entre colchetes. |
[^...] | Corresponde a qualquer caractere simples que não esteja entre colchetes. |
re* | Corresponde ao subpadrão anterior zero ou mais vezes. |
re+ | Corresponde ao subpadrão anterior uma ou mais vezes. |
re? | Corresponde ao subpadrão anterior zero ou uma vez. |
re{ n} | Corresponde ao subpadrão anterior n vezes. |
re{ n,} | Corresponde ao subpadrão anterior n vezes ou mais. |
re{ n, m} | Corresponde ao subpadrão anterior pelo menos n vezes até m vezes. |
a| b | Corresponde a a ou b. |
(re) | Agrupa a expressão regular e lembra o texto correspondente. |
(?imx) | Temporariamente ativa as opções i, m ou x dentro da expressão regular. Se dentro de parênteses, afeta apenas a parte dentro dos parênteses. |
(?-imx) | Temporariamente desativa as opções i, m ou x dentro da expressão regular. Se dentro de parênteses, afeta apenas a parte dentro dos parênteses. |
(?: re) | Agrupa a expressão regular, mas não lembra o texto correspondente. |
(?imx: re) | Temporariamente ativa as opções i, m ou x dentro dos parênteses. |
(?-imx: re) | Temporariamente desativa as opções i, m ou x dentro dos parênteses. |
(#...) | Comentário. |
(?= re) | Usa o padrão para especificar uma posição. Não há intervalo. |
(?! re) | Usa a negação do padrão para especificar uma posição. Não há intervalo. |
(?> re) | Corresponde a um padrão independente sem retrocesso. |
\w | Corresponde a caracteres alfabéticos. |
\W | Corresponde a caracteres não-alfabéticos. |
\s | Coincidência de caractere branco. Equivalente a [\t\n\r\f]。 |
\S | Coincidência de caractere não-branco. |
\d | Coincidência de numérico. Equivalente a [0-9]。 |
\D | Coincidência de não-numérico. |
\A | Coincidência com o início da string. |
\Z | Coincidência com o final da string. Se houver caractere de nova linha, coincide apenas com o caractere de nova linha antes. |
\z | Coincidência com o final da string. |
\G | Coincidência com o ponto final da última coincidência completada. |
\b | Coincidência com o limite de palavra quando fora de parênteses, com o caractere de backspace (0x08)。 |
\B | Coincidência de não-limite de palavra. |
\n, \t, etc. | Coincidência de caractere de nova linha, caractere de retorno, tabulação, etc. |
\1...\9 | Coincidência com a subexpressão de grupo n-ésima. |
\10 | Se já coincidir, coincide com a subexpressão de grupo n-ésima. Caso contrário, aponta para a representação octal do código de caractere. |
exemplo | descrição |
---|---|
/ruby/ | Coincidência de "ruby" |
¥ | Coincidência do símbolo de Yen. Ruby 1.9 e Ruby 1.8 Suporta múltiplos caracteres. |
exemplo | descrição |
---|---|
/[Rr]uby/ | Coincidência de "Ruby" ou "ruby" |
/rub[ye]/ | combina "ruby" ou "rube" |
/[aeiou]/ | Coincidência de qualquer vogal minúscula |
/[0-9]/ | Coincidência de qualquer número, equivalente a /[0123456789]/ Idêntico |
/[a-z]/ | Coincidência de qualquer caractere minúsculo ASCII |
/[A-Z]/ | Coincidência de qualquer caractere maiúsculo ASCII |
/[a-zA-Z0-9]/ | Coincidência de qualquer caractere dentro de parênteses |
/[^aeiou]/ | Coincidência de qualquer caractere não-vogal minúsculo |
/[^0-9]/ | Coincidência de qualquer caractere não-numérico |
exemplo | descrição |
---|---|
/./ | Coincidência de qualquer caractere exceto o caractere de nova linha |
/./m | Também coincide com o caractere de nova linha, no modo de várias linhas |
/\d/ | Coincidência de um caractere numérico, equivalente a /[0-9]/ |
/\D/ | Coincidência de um caractere não-numérico, equivalente a /[^0-9]/ |
/\s/ | Coincidência de um caractere branco, equivalente a /[ \t\r\n\f]/ |
/\S/ | Coincidência de um caractere não-branco, equivalente a /[^ \t\r\n\f]/ |
/\w/ | Coincidência de um caractere alfabético, equivalente a /[A-Za-z0-9_]/ |
/\W/ | Coincidência de um caractere não-alfabético, equivalente a /[^A-Za-z0-9_]/ |
exemplo | descrição |
---|---|
/ruby?/ | Coincidência de "rub" ou "ruby". O y é opcional. |
/ruby*/ | Coincidência de "rub" seguido por 0 ou mais do y. |
/ruby+/ | Coincidência de "rub" seguido por 1 um ou mais do y. |
/\d{3}/ | Coincidência exata 3 um número. |
/\d{3,}/ | coincidência 3 um ou mais números. |
/\d{3,5}/ | coincidência 3 um,4 ou 5 um número. |
Isso coincidirá com a repetição mínima.
exemplo | descrição |
---|---|
/<.*>/ | Repetição gulosa: coincidência de "<ruby>perl>" |
/<.*?>/ | Repetição não-gulosa: coincidência de "<ruby>perl>" com "<ruby>" |
exemplo | descrição |
---|---|
/\D\d+/ | sem grupos: + repetição de \d |
/(\D\d)+/ | grupos: + repetição de \D\d |
/([Rr]uby(, )?)+/ | combina "Ruby", "Ruby, ruby, ruby", etc. |
isto novamente combina o grupo que foi combinado anteriormente.
exemplo | descrição |
---|---|
/([Rr])uby&\1ails/ | combina ruby&rails ou Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | cadeia de caracteres entre aspas simples ou duplas. \1 combina o caractere que o primeiro grupo combina, \2 combina o caractere que a segunda grupo combina, e assim por diante. |
exemplo | descrição |
---|---|
/ruby|rube/ | combina "ruby" ou "rube" |
/rub(y|le)/ | combina "ruby" ou "ruble" |
/ruby(!+|\?)/ | "ruby" seguido de um ou mais ! ou seguido de um ? |
isto requer especificar o local de combinação.
exemplo | descrição |
---|---|
/^Ruby/ | combina a string que começa com "Ruby" ou a linha |
/Ruby$/ | combina a string que termina com "Ruby" ou a linha |
/\ARuby/ | combina a string que começa com "Ruby" |
/Ruby\Z/ | combina a string que termina com "Ruby" |
/\bRuby\b/ | combina a fronteira de palavra "Ruby" |
/\brub\B/ | \B é uma fronteira não-palavra: combina "rube" e "ruby" com "rub", mas não combina "rub" sozinho |
/Ruby(?=!)/ | se houver um exclamation mark após "Ruby", combina "Ruby" |
/Ruby(?!!)/ | se não houver um exclamation mark após "Ruby", combina "Ruby" |
exemplo | descrição |
---|---|
/R(?#comment)/ | combina "R". Todos os caracteres restantes são comentários. |
/R(?i)uby/ | ao combinar "uby", não distingue maiúsculas e minúsculas. |
/R(?i:uby)/ | é o mesmo que acima. |
/rub(?:y|le))/ | só agrupamento, sem \1 referências inversas |
sub e gsub e suas variáveis de substituição sub! e gsub! é um método importante de string ao usar expressão regular.
todas essas métodos são usados para executar operações de busca e substituição usando padrões de expressão regular.sub e sub! substitui a primeira ocorrência do padrão,gsub e gsub! substitui todas as ocorrências do padrão.
sub e gsub retorna uma nova string, mantendo a string original inalterada, enquanto sub! e gsub! então modificará as strings que eles chamam.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 # Esta é um número de telefone" # Remover comentários Ruby phone = phone.sub!(/#.*$/, ") puts "Número de Telefone : #{phone}" # Remover todos os caracteres exceto os números phone = phone.gsub!("/\D/, ") puts "Número de Telefone : #{phone}"
O resultado de execução do exemplo acima é:
Número de Telefone : 138-3453-1111 Número de Telefone : 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails é rails, Ruby on Rails é uma excelente framework Ruby" # Transformar todos os "rails" em "Rails" text.gsub!("rails", "Rails") # Transformar todos os "Rails" em maiúscula text.gsub!("/\brails\b/, "Rails") puts "#{text}"
O resultado de execução do exemplo acima é:
Rails é uma excelente framework Ruby para Ruby on Rails