English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Scala utilise le paquet scala.util.matching pour Regex La classe pour prendre en charge les expressions régulières. L'exemple suivant montre comment utiliser les expressions régulières pour rechercher des mots. Scala :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = "Scala".r val str = "Scala est Scalable et cool" println(pattern findFirstIn str) } }
Exécuter le code suivant, le résultat est :
$ scalac Test.scala $ scala Test Some(Scala)
Dans l'exemple, un objet Regex est construit à l'aide de la méthode r() de la classe String.
Ensuite, utilisez la méthode findFirstIn pour trouver le premier élément correspondant.
Si vous devez afficher tous les éléments correspondants, vous pouvez utiliser la méthode findAllIn.
Vous pouvez utiliser la méthode mkString( ) pour connecter les chaînes de résultats de correspondance régulière et utiliser le管道(|) pour définir différents modèles :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("(S|s)cala") // La première lettre peut être en majuscule S ou en minuscule s val str = "Scala est scalable et cool" println((pattern findAllIn str).mkString(",")) // Connecter les résultats de retour en utilisant une virgule , } }
Exécuter le code suivant, le résultat est :
$ scalac Test.scala $ scala Test Scala,scala
Si vous devez remplacer le texte correspondant par un mot clé spécifié, vous pouvez utiliser replaceFirstIn( ) Méthode pour remplacer le premier élément correspondant, en utilisant replaceAllIn( ) Méthode pour remplacer tous les éléments correspondants, exemple suivant :
object Test { def main(args: Array[String]) { val pattern = "(S|s)cala".r val str = "Scala est scalable et cool" println(pattern replaceFirstIn(str, "Java")) } }
Exécuter le code suivant, le résultat est :
$ scalac Test.scala $ scala Test Java est scalable et cool
Les expressions régulières Scala héritent des règles de syntaxe de Java, et Java utilise la plupart des règles du langage Perl.
Dans le tableau suivant, nous avons donné quelques règles d'expressions régulières couramment utilisées :
Expression | Règle de correspondance |
---|---|
^ | Correspond à la position de début de la chaîne d'entrée. |
$ | Correspond à la position de fin de la chaîne d'entrée. |
. | Correspond à tout caractère sauf "\r\n" |
[...] | Ensemble de caractères. Correspond à l'un des caractères inclus. Par exemple, "[abc]" correspond à "plain" dans "a". |
[^...] | Caractère de négation. Correspond à tout caractère non inclus. Par exemple, "[^abc]" correspond à "plain" dans "p", "l", "i", "n". |
\\A | Correspond à la position de début de la chaîne de caractères (sans support pour les lignes multiples) |
\\z | Fin de la chaîne de caractères (similaire à $, mais n'est pas affecté par l'option de traitement des lignes multiples) |
\\Z | Fin de la chaîne de caractères ou de la fin de la ligne (n'est pas affecté par l'option de traitement des lignes multiples) |
re* | Répète zéro fois ou plus |
re+ | Répète une fois ou plus |
re? | Répète zéro fois ou une fois |
re{ n} | Répète n fois |
re{ n,} | Répète n fois ou plus |
re{ n, m} | Répète n à m fois |
a|b | Correspond à a ou b |
(re) | Correspond à re, et capture le texte dans un groupe automatiquement nommé |
(?: re) | Correspond à re, sans capturer le texte correspondant, ni attribuer un numéro de groupe à ce groupe |
(?> re) | Expression régulière gourmande |
\\w | Correspond à une lettre ou un chiffre ou un tiret bas ou un caractère chinois |
\\W]} | Correspond à tout caractère autre qu'une lettre, un chiffre, un tiret bas, un caractère chinois |
\\s | Correspond à tout espace, équivalent à [\t\n\r\f] |
\\S | Correspond à tout caractère autre qu'un espace |
\\d | Correspond à des chiffres, semblable à [0-9] |
\\D | Correspond à tout caractère non numérique |
\\G | Début de la recherche actuelle |
\\n | Retour chariot |
\\b | Généralement une position de délimitation de mot, mais si elle est utilisée dans un ensemble de caractères, elle représente un retour arrière |
\\B | Correspond à des positions qui ne sont pas le début ni la fin d'un mot |
\\t | Tabulation |
\\Q | Début des guillemets :\Q(a+b)*3\E Correspond au texte "(a+b)*3"。 |
\\E | Fin des guillemets :\Q(a+b)*3\E Correspond au texte "(a+b)*3"。 |
Exemple | Description |
---|---|
. | Correspond à tout caractère sauf "\r\n" |
[Rr]uby | Correspond à "Ruby" ou "ruby" |
rub[ye] | Correspond à "ruby" ou "rube" |
[aeiou] | Correspond aux lettres minuscules :aeiou |
[0-9] | Correspond à tout chiffre, semblable à [0123456789] |
[a-z] | Correspond à toute lettre minuscule ASCII |
[A-Z] | Correspond à toute lettre majuscule ASCII |
[a-zA-Z0-9] | Correspond à des chiffres et des lettres majuscules et minuscules |
[^aeiou] | Correspond à des caractères autres que aeiou |
[^0-9] | Correspond à des caractères autres que des chiffres |
\\d | Correspond à des chiffres, semblable à: [0-9] |
\\D | Correspond à des caractères non numériques, semblable à: [^0-9] |
\\s | Correspond aux espaces, semblable à: [ \t\r\n\f] |
\\S | Correspond à des caractères non espaces, semblable à: [^ \t\r\n\f] |
\\w | Correspond à des lettres, des chiffres, des tirets bas, semblable à: [A-Za-z0-9_] |
\\W]} | Correspond à ce qui n'est pas un alphabet, un chiffre, un tiret bas, etc. : [^A-Za-z0-9_] |
ruby? | Correspond à "rub" ou "ruby" : y est optionnel |
ruby* | Correspond à "rub" ajouté 0 de y ou plusieurs. |
ruby+ | Correspond à "rub" ajouté 1 de y ou plusieurs. |
\\d{3} | Correspond exactement à 3 de nombres. |
\\d{3,} | Correspond à 3 de nombres ou plusieurs. |
\\d{3,5} | Correspond à 3 et4 ou 5 de nombres. |
\\D\\d+ | Pas de groupe : + Répétition de \d |
(\\D\\d)+/ | Groupe : + Répétition de \D\d |
([Rr]uby(, )?)+ | Correspond à "Ruby", "Ruby, ruby, ruby", etc. |
Attention, chaque caractère de la table ci-dessus est utilisé deux fois. C'est parce que dans Java et Scala, les backslashes dans les chaînes de caractères sont des caractères d'échappement. Donc si vous voulez afficher \, vous devez écrire \\ dans la chaîne pour obtenir un backslash. Voir l'exemple suivant :
import scala.util.matching.Regex object Test { def main(args: Array[String]) { val pattern = new Regex("abl[ae]\\d+") val str = "ablaw is able1 et cool println((pattern findAllIn str).mkString(",")) } }
Exécuter le code suivant, le résultat est :
$ scalac Test.scala $ scala Test able1