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