Latest web development tutorials

Expressões Regulares Scala

Scala porscala.util.matching tipos de pacotes classe Regex para suportar expressões regulares.O exemplo a seguir demonstra o uso de pesquisa de expressão regular palavraScala:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = "Scala".r
      val str = "Scala is Scalable and cool"
      
      println(pattern findFirstIn str)
   }
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
Some(Scala)

Exemplos de utilização do método da classe String r () para construir um objeto Regex.

Em seguida, use findFirstIn maneira de encontrar o primeiro jogo.

Se você precisa ver todos os jogos podem ser usados ​​métodos findAllIn.

Você pode usar o método mkString () para conectar uma expressão regular corresponde à string, e você pode usar o pipe (|) para definir modos diferentes:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("(S|s)cala")  // 首字母可以是大写 S 或小写 s
      val str = "Scala is scalable and cool"
      
      println((pattern findAllIn str).mkString(","))   // 使用逗号 , 连接返回结果
   }
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
Scala,scala

Se você precisa substituir o texto correspondente palavras-chave especificadas, você pode usar o métodoreplaceFirstIn () para substituir o primeiro jogo, use replaceAllIn ()método substitui todas as partidas, os exemplos são os seguintes:

object Test {
   def main(args: Array[String]) {
      val pattern = "(S|s)cala".r
      val str = "Scala is scalable and cool"
      
      println(pattern replaceFirstIn(str, "Java"))
   }
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
Java is scalable and cool

Expressões regulares

Scala regras de sintaxe de expressões regulares herdou Java, Java vai usar a maioria das regras da linguagem Perl.

A tabela a seguir dá-nos algumas regras de expressões regulares comuns:

expressão regra de correspondência
^ Combinar a cadeia de entrada começa.
$ Coincidir com a extremidade de entrada da posição string.
. Corresponde a qualquer caractere único, exceto "\ r \ n" é.
[...] Conjunto de caracteres. Corresponde a qualquer caractere incluído. Por exemplo, "[abc]" corresponde a "simples" no "a".
[^ ...] conjunto de caracteres inversa. Corresponde a qualquer caractere não incluído. Por exemplo, "[^ abc]" corresponde a "simples" no "p", "l", "i", "n".
\\ A Combinar a posição da cadeia entrada de partida (sem suporte multi-line)
\\ Z Final da cadeia ($ semelhante, mas não afectam as opções de tratamento para várias linhas)
\\ Z Extremidade da corda ou o fim da linha (do tratamento sobre as opções de várias linhas)
re * Repetidos zero ou mais vezes
re + Repetido uma ou mais vezes
re? Repetidos zero ou uma vez
re {n} Repetidas vezes n
re {n,}
re {n, m} Repetida n vezes a M
a | b Um jogo ou b
(Re) Jogo re, e capturar o texto para grupo chamado auto
(:? Re) Jogo re, não capturar o texto correspondente, nem a este número do grupo de grupo atribuído
(?> Re) subexpressions Greedy
\\ W letras igualar ou números ou caracteres de sublinhado ou
\\ W Não encontrou nenhum letras, números, sublinhados, caracteres chineses
\\ S Corresponde a qualquer espaço em branco, equivalente a [\ t \ n \ r \ f]
\\ S Não corresponder a qualquer caractere de espaço em branco
\\ D números correspondentes, semelhante a [0-9]
\\ D Jogos quaisquer caracteres não numéricos
\\ G O início da pesquisa atual
\\ N nova linha
\\ B Normalmente uma posição limite de palavra, mas se você usar um caráter de classe representa backspace
\\ B Localização não coincidir com o início ou fim de uma palavra
\\ T tabs
\\ Q Comececitação: \ Q (a + b) * 3 \ E corresponde texto "(a + b) * 3 ".
\\ E Fimde citação: \ Q (a + b) * 3 \ E corresponde texto "(a + b) * 3 ".

Exemplos de expressões regulares

Exemplos descrição
. Corresponde a qualquer caractere único, exceto "\ r \ n" é.
[Rr] UBY Match "Ruby" ou "ruby"
esfregue [vos] Match "ruby" ou "caipira"
[Aeiou] Combinar letras minúsculas: aeiou
[0-9] Corresponde a qualquer dígito, semelhante a [0123456789]
[Az] Corresponde a qualquer letras minúsculas ASCII
[AZ] Corresponde a qualquer maiúsculas ASCII
[A-zA-Z0-9] números correspondentes, letras maiúsculas e minúsculas
[^ Aeiou] Além de produtos para outros personagens aeiou
[^ 0-9] Corresponde a qualquer caractere diferente de números
\\ D números correspondentes, como este: [0-9]
\\ D números não correspondentes, como este: [^ 0-9]
\\ S espaços jogo, semelhante a: [\ t \ r \ n \ f]
\\ S Matching não-espaço, semelhante a: [^ \ t \ r \ n \ f]
\\ W cartas de correspondência, números, sublinhados, semelhantes a: [A-Za-z0-9_]
\\ W letras não correspondentes, números, sublinhados, semelhantes a: [^ A-Za-z0-9_]
ruby? Match "esfrega" ou "ruby": y é opcional
rubi * Match "esfregar" plus zero ou mais dos y.
ruby + Match "esfrega" mais um ou mais dos y.
\\ D {3} Que corresponde exatamente a três números.
\\ D {3,} Combinar três ou mais dígitos.
\\ D {3,5} Combinar três, quatro ou cinco números.
\\ D \\ d + No Agrupamento: + repetindo \ d
(\\ D \\ d) + / Grupo: + repetindo \ D \ d para
([Rr] UBY (,)?) + Match "Ruby", "Ruby, Ruby, Ruby", etc.

Note que a tabela acima para cada personagem usa dois barra invertida. Isto porque, em Java e Scala barra invertida na cadeia é o caractere de escape. Então, se você quer saída. \., Você precisa escrever na cadeia. \\. Para se ter uma barra invertida. Veja os seguintes exemplos:

import scala.util.matching.Regex

object Test {
   def main(args: Array[String]) {
      val pattern = new Regex("abl[ae]\\d+")
      val str = "ablaw is able1 and cool"
      
      println((pattern findAllIn str).mkString(","))
   }
}

Implementação do código acima, a saída é:

$ scalac Test.scala 
$ scala Test
able1