Latest web development tutorials

Expressions régulières Scala

Scala parscala.util.matching types de paquets de classe Regex pour soutenir les expressions régulières.L'exemple suivant illustre l'utilisation du mot de recherche régulière d'expressionScala:

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)
   }
}

Mise en œuvre du code ci-dessus, la sortie est:

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

Des exemples d'utilisation de la méthode classe String r () pour construire un objet Regex.

Ensuite, utilisez manière findFirstIn pour trouver le premier match.

Si vous avez besoin de voir tous les matches peuvent être utilisées des méthodes findAllIn.

Vous pouvez utiliser la méthode mkString () pour connecter une expression régulière correspond à la chaîne, et vous pouvez utiliser le tuyau (|) pour définir les différents modes:

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(","))   // 使用逗号 , 连接返回结果
   }
}

Mise en œuvre du code ci-dessus, la sortie est:

$ scalac Test.scala 
$ scala Test
Scala,scala

Si vous avez besoin de remplacer le texte correspondant des mots - clés spécifiques, vous pouvez utiliser la méthodereplaceFirstIn () pour remplacer le premier match, utilisez replaceAllIn ()méthode remplace tous les matchs, les exemples sont les suivants:

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"))
   }
}

Mise en œuvre du code ci-dessus, la sortie est:

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

expressions régulières

Scala expression régulière règles de syntaxe héritées Java, Java utilisera la plupart des règles du langage Perl.

Le tableau suivant nous donne quelques règles régulières communes d'expression:

expression règle de concordance
^ Faites correspondre la chaîne d'entrée commence.
$ Faites correspondre l'extrémité d'entrée de la position de chaîne.
. Correspond à tout caractère sauf "\ r \ n" est.
[...] Jeu de caractères. Correspond à tout caractère inclus. Par exemple, "[abc]" correspond à "brut" dans le "a".
[^ ...] jeu de caractères inverse. Correspond à tout caractère non inclus. Par exemple, "[^ abc]" correspond à "brut" dans le "p", "l", "i", "n".
\\ A Faites correspondre la position de début de chaîne d'entrée (pas de support multi-ligne)
\\ Z Fin de la chaîne ($ similaire, mais pas d'incidence sur les options de traitement pour plusieurs lignes)
\\ Z Fin de la chaîne ou à la fin de la ligne (provenant du traitement des options sur plusieurs lignes)
re * Répétées zéro fois ou plus
re + Répétées une ou plusieurs fois
re? Répétées zéro ou une fois
re {n} Répétées n fois
re {n}
re {n, m} n répétée à m fois
a | b Un match ou b
(Re) Match re, et de capturer le texte à un groupe auto-nommé
(?: Re) Match re, ne capture pas le texte correspondant, ni à ce numéro de groupe de groupe assigné
(?> Re) subexpressions Greedy
\\ W lettres ou des chiffres, des matches ou des caractères de soulignement ou
\\ W Non correspond à aucun des lettres, des chiffres, des traits de soulignement, les caractères chinois
\\ S Correspond à tout espace, équivalent à [\ t \ n \ r \ f]
\\ S Non correspondre à tout caractère d'espacement
\\ D Au même numéro, similaire à [0-9]
\\ D Correspond tous les caractères non-numériques
\\ G Le début de la recherche en cours
\\ N newline
\\ B Habituellement, une position de limite de mot, mais si vous utilisez un caractère de classe représente backspace
\\ B Lieu ne correspond au début ou à la fin d'un mot
\\ T Tabs
\\ Q Démarrercitation: \ Q (a + b) * 3 \ E correspond texte "(a + b) * 3 ".
\\ E Fin decitation: \ Q (a + b) * 3 \ E correspond texte "(a + b) * 3 ".

Exemples d'expressions régulières

Exemples description
. Correspond à tout caractère sauf "\ r \ n" est.
[Rr] uby Match "Ruby" ou "ruby"
rub [vous] Match "ruby" ou "plouc"
[Aeiou] Faites correspondre les lettres minuscules: aeiou
[0-9] Correspond à tout chiffre, semblable à [0123456789]
[Az] Correspond les lettres ASCII minuscules
[AZ] Correspond à tout en majuscules ASCII
[A-zA-Z0-9] numéros correspondants, des lettres majuscules et minuscules
[^ Aeiou] En plus d'autres caractères correspondant à aeiou
[^ 0-9] Correspond à tout caractère autre que les numéros
\\ D numéros correspondants, comme ceci: [0-9]
\\ D Numéros non correspondants, comme ceci: [^ 0-9]
\\ S espaces de match, similaire à: [\ t \ r \ n \ f]
\\ S Matching non-espace, semblable à: [^ \ t \ r \ n \ f]
\\ W lettres de match, des chiffres, souligne, similaires à: [A-Za-z0-9_]
\\ W lettres non-correspondance, des nombres, souligne, similaires à: [^ A-Za-z0-9_]
ruby? Match "rub" ou "ruby": y est facultative
ruby * Match "rub" plus zéro ou plus y.
ruby + Match "rub" plus un ou plusieurs des y.
\\ D {3} Exactement correspondant à trois chiffres.
\\ D {3,} Associez trois chiffres ou plus.
\\ D {3,5} Associez trois, quatre ou cinq chiffres.
\\ \\ D d + Pas de regroupement: + répétition \ d
(D \\ \\ d) + / Groupe: + répéter \ D \ d pour
([Rr] uby (,)?) + Match "Ruby", "Ruby, rubis, rubis", etc.

Notez que le tableau ci-dessus pour chaque personnage utilise deux backslash. En effet, en Java et Scala antislash dans la chaîne est le caractère d'échappement. Donc, si vous voulez afficher. \., Vous devez écrire dans la chaîne. \\. Pour obtenir une barre oblique inverse. Voir les exemples suivants:

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(","))
   }
}

Mise en œuvre du code ci-dessus, la sortie est:

$ scalac Test.scala 
$ scala Test
able1