English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O Scala usa o pacote scala.util.matching para Regex Classe para suportar expressões regulares. O exemplo a seguir demonstra a busca de palavras usando expressão regular Scala :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala é Scalable e divertido" println(pattern findFirstIn str) } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test Some(Scala)
No exemplo, foi construído um objeto Regex usando o método r() da classe String.
Em seguida, use o método findFirstIn para encontrar o primeiro item correspondente.
Se precisar visualizar todos os itens correspondentes, você pode usar o método findAllIn.
Você pode usar o método mkString( ) para conectar strings de resultados de correspondência de expressão regular e pode usar o pipe | para definir diferentes padrões:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // A primeira letra pode ser maiúscula S ou minúscula s val str = "Scala é escalável e divertido" println((pattern findAllIn str).mkString(",")) // Use vírgula , para conectar os resultados de retorno } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test Scala,scala
Se precisar substituir o texto correspondente por uma palavra-chave específica, você pode usar replaceFirstIn( ) Método para substituir o primeiro item correspondente, usando replaceAllIn( ) Método substitui todos os itens correspondentes, exemplo a seguir:
object Test { def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala é escalável e divertido" println(pattern replaceFirstIn(str, "Java")) } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test Java é escalável e divertido
A expressão regular do Scala herda as regras de sintaxe do Java, e o Java usa principalmente as regras da linguagem Perl.
Na tabela a seguir, apresentamos algumas regras de expressão regular comuns:
Expressão | Regra de expressão regular |
---|---|
^ | Coincide com a posição inicial da string de entrada. |
$ | Coincide com a posição final da string de entrada. |
. | Corresponde a qualquer caractere individual diferente de "\r\n". |
[...] | Conjunto de caracteres. Corresponde a qualquer caractere incluído. Por exemplo, "[abc]" combina com "plain" em "a". |
[^...] | Conjunto de caracteres inverso. Corresponde a qualquer caractere não incluído. Por exemplo, "[^abc]" combina com "plain" em "p", "l", "i", "n". |
\\A | Corresponde à posição inicial da string de entrada (sem suporte para múltiplas linhas) |
\\z | Fim da string (semelhante a $, mas não afetado pela opção de processamento de linhas múltiplas) |
\\Z | Fim da string ou fim da linha (não afetado pela opção de processamento de linhas múltiplas) |
re* | Repete zero vezes ou mais |
re+ | Repete uma vez ou mais |
re? | Repete zero vezes ou uma vez |
re{ n} | Repete n vezes |
re{ n,} | Repete n vezes ou mais |
re{ n, m} | Repete n vezes até m vezes |
a|b | Corresponde a a ou b |
(re) | Corresponde a re, e captura o texto em um grupo automaticamente nomeado |
(?: re) | Corresponde a re, não captura o texto correspondente, nem atribui um número de grupo a este grupo |
(?> re) | Expressão regular glotônica |
\\w | Corresponde a letra ou número ou sublinhado ou caractere chinês |
\\.\W} | Corresponde a qualquer caractere que não seja uma letra, número, sublinhado ou caractere chinês |
\\s | Corresponde a qualquer espaço em branco, equivalente a [\t\n\r\f] |
\\S | Corresponde a qualquer caractere que não seja um espaço em branco |
\\d | Corresponde a números, semelhante a [0-9] |
\\D | Corresponde a qualquer caractere não numérico |
\\G | Início da busca atual |
\\n | Caractere de nova linha |
\\b | Geralmente é uma posição de delimitador de palavra, mas se usado dentro de um caractere classe representa o caractere de retrocesso |
\\B | Corresponde a posição não inicial ou final de palavra |
\\t | Tabulação |
\\Q | Início da citação:\Q(a+b)*3\E Pode combinar o texto "(a+b)*3". |
\\E | Fim da citação:\Q(a+b)*3\E Pode combinar o texto "(a+b)*3". |
Exemplo | Descrição |
---|---|
. | Corresponde a qualquer caractere individual diferente de "\r\n". |
[Rr]uby | Corresponde a "Ruby" ou "ruby" |
rub[ye] | Corresponde a "ruby" ou "rube" |
[aeiou] | Corresponde a letras minúsculas: aeiou |
[0-9] | Corresponde a qualquer número, semelhante a [0123456789] |
[a-z] | Corresponde a qualquer letra minúscula ASCII |
[A-Z] | Corresponde a qualquer letra maiúscula ASCII |
[a-zA-Z0-9] | Corresponde a números e letras maiúsculas e minúsculas |
[^aeiou] | Corresponde a caracteres diferentes de aeiou |
[^0-9] | Corresponde a caracteres diferentes de números |
\\d | Corresponde a números, semelhante a: [0-9] |
\\D | Corresponde a não números, semelhante a: [^0-9] |
\\s | Corresponde a espaços em branco, semelhante a: [ \t\r\n\f] |
\\S | Corresponde a não espaços em branco, semelhante a: [^ \t\r\n\f] |
\\w | Corresponde a letras, números, sublinhado, semelhante a: [A-Za-z0-9_] |
\\.\W} | Correspondência de não-letra, número, sublinhado, semelhante a: [^A-Za-z0-9_] |
ruby? | Correspondência de "rub" ou "ruby": y é opcional |
ruby* | Correspondência de "rub" mais 0 número ou múltiplos de y. |
ruby+ | Correspondência de "rub" mais 1 do y. |
número ou múltiplos números.3} | número ou múltiplos 3 ou |
número ou múltiplos números.3Correspondência exata | , 3 }, |
número ou múltiplos números.3\\.{5} | , 3 Correspondência4 número 5 ou |
número.+ | \\.\d + Sem grupo: |
(\\D\\d)+/ | Grupo: + Repetição de \D\d |
([Rr]uby(, )?)+ | Correspondência de "Ruby"、"Ruby, ruby, ruby",etc |
Observe que cada caractere no gráfico acima usou duas barras invertidas. Isso se deve ao fato de que o caractere de escape é um caractere de escape em strings Java e Scala. Portanto, se você quiser imprimir \, você precisa escrever \\ na string para obter uma barra invertida. Veja o exemplo a seguir:
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("abl[ae]\\d+") val str = "ablaw is able1 e fresco" println((pattern findAllIn str).mkString(",")) } }
Executar o código acima, o resultado de saída será:
$ scalac Test.scala $ scala Test able1