English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Expression régulièreC'est une séquence spéciale de caractères qui, en utilisant un schéma avec une grammaire spécifique, permet de correspondre ou de rechercher un ensemble de chaînes de caractères.
Les expressions régulières utilisent certains caractères spécifiques prédefinis, ainsi que des combinaisons de ces caractères, pour former une "chaîne de règle", qui est utilisée pour exprimer une logique de filtrage sur les chaînes de caractères.
Expression régulièreVisuellement, c'est un modèle entre les barres obliques ou entre tout séparateur suivant %r, comme indiqué ci-dessous :
/pattern/ /pattern/im # Vous pouvez spécifier des options %r!/usr/local! # Utilisez des séparateurs dans les expressions régulières
#!/usr/bin/ruby ligne1 = "Cats are smarter than dogs"; ligne2 = "Dogs also like meat"; if ( ligne1 =~ /Cats(.*)/ ) puts "Ligne1 contains Cats" fin if ( ligne2 =~ /Cats(.*)/ ) puts "Ligne2 contains Dogs" fin
Les résultats de l'exemple ci-dessus sont les suivants :
Ligne1 contains Cats
Les expressions régulières peuvent contenir des modificateurs optionnels, qui contrôlent divers aspects de la correspondance. Les modificateurs sont spécifiés après le deuxième slash, comme dans l'exemple ci-dessus. La liste suivante indique les modificateurs possibles :
Modificateurs | description |
---|---|
i | Ignorer la casse lors de la correspondance du texte. |
o | N'exécutez qu'une seule fois l'interpolation #{}, les expressions régulières sont évaluées dès le premier passage. |
x | Ignorer les espaces, permet de placer des espaces et des commentaires dans l'expression entière. |
m | Match multiple lines, treating newline characters as normal characters. |
u,e,s,n | Interpret the regular expression as Unicode (UTF-8)、EUC、SJIS or ASCII. If no modifier is specified, the regular expression is considered to use the source encoding. |
Like strings separated by %Q, Ruby allows you to use %r as the beginning of a regular expression, followed by any delimiter. This is very useful when describing a large number of slashes you do not want to escape.
# Below matches a single slash character, not escaped %r|/| # Flag character can be matched using the following syntax %r[</(.*)>]i
Except control characters,(+ ? . * ^ $ ( ) [ ] { } | \)All other characters match themselves. You can escape control characters by placing a backslash before them.
The following table lists the regular expression syntax available in Ruby.
Pattern | description |
---|---|
^ | Match the beginning of a line. |
$ | Match the end of a line. |
. | Match any single character except the newline character. When using the m option, it can also match the newline character. |
[...] | Match any single character within square brackets. |
[^...] | Match any single character not within square brackets. |
re* | Match the preceding subexpression zero times or more. |
re+ | Match the preceding subexpression once or more. |
re? | Match the preceding subexpression zero times or once. |
re{ n} | Match the preceding subexpression n times. |
re{ n,} | Match the preceding subexpression n times or more. |
re{ n, m} | Match the preceding subexpression at least n times and at most m times. |
a| b | Match a or b. |
(re) | Group the regular expression and remember the matched text. |
(?imx) | Temporarily enable the i, m, or x options within the regular expression. If within parentheses, it only affects the part within the parentheses. |
(?-imx) | Temporarily disable the i, m, or x options within the regular expression. If within parentheses, it only affects the part within the parentheses. |
(?: re) | Group the regular expression but do not remember the matched text. |
(?imx: re) | Temporarily enable the i, m, or x options within parentheses. |
(?-imx: re) | Temporarily disable the i, m, or x options within parentheses. |
(?#...) | Comment. |
(?= re) | Use pattern to specify position. No range. |
(?! re) | Use negative pattern to specify position. No range. |
(?> re) | Match independent patterns without backtracking. |
\w | Match word characters. |
\W | Match non-word characters. |
\s | Correspond à un caractère blanc. Équivalent à [\t\n\r\f]。 |
\S | Correspond à un caractère non blanc. |
\d | Correspond à un nombre. Équivalent à [0-9]。 |
\D | Correspond à un caractère non numérique. |
\A | Correspond au début de la chaîne. |
\Z | Correspond à la fin de la chaîne. Si il existe un retour à la ligne, il ne correspond qu'au retour à la ligne avant. |
\z | Correspond à la fin de la chaîne. |
\G | Correspond au dernier point correspondu. |
\b | Correspond à une frontière de mot à l'extérieur des parenthèses, à la touche d'effacement à l'intérieur des parenthèses (0x08)。 |
\B | Correspond à une frontière non mot |
\n, \t, etc. | Correspond au retour à la ligne, au retour chariot, au tabulation, etc. |
\1...\9 | Correspond à la n-ième sous-expression de groupe. |
\10 | Correspond à la n-ième sous-expression de groupe si elle a été correspondue. Sinon, vers l'octale de l'encodage des caractères. |
exemple | description |
---|---|
/ruby/ | Correspond à "ruby" |
¥ | Correspond au symbole Yen. Ruby 1.9 et Ruby 1.8 Supporte plusieurs caractères. |
exemple | description |
---|---|
/[Rr]uby/ | Correspond à "Ruby" ou "ruby" |
/rub[ye]/ | matche "ruby" ou "rube" |
/[aeiou]/ | Correspond à tout caractère voyelle minuscule |
/[0-9]/ | Correspond à tout nombre, avec /[0123456789]/ Identique |
/[a-z]/ | Correspond à tout caractère minuscule ASCII |
/[A-Z]/ | Correspond à tout caractère majuscule ASCII |
/[a-zA-Z0-9]/ | Correspond à tout caractère dans les crochets |
/[^aeiou]/ | Correspond à tout caractère ne siendo une voyelle minuscule |
/[^0-9]/ | Correspond à tout caractère non numérique |
exemple | description |
---|---|
/./ | Correspond à tout caractère sauf le retour à la ligne |
/./m | Dans le mode multiline, il peut également correspondre au retour à la ligne |
/\d/ | Correspond à un nombre, équivalent à /[0-9]/ |
/\D/ | Correspond à un caractère non numérique, équivalent à /[^0-9]/ |
/\s/ | Correspond à un caractère blanc, équivalent à /[ \t\r\n\f]/ |
/\S/ | Correspond à un caractère non blanc, équivalent à /[^ \t\r\n\f]/ |
/\w/ | Correspond à un caractère alphabétique, équivalent à /[A-Za-z0-9_]/ |
/\W/ | Correspond à un caractère non mot, équivalent à /[^A-Za-z0-9_]/ |
exemple | description |
---|---|
/ruby?/ | Correspond à "rub" ou "ruby". Où y est optionnel. |
/ruby*/ | Correspond à "rub" ajouté 0 ou plusieurs de y. |
/ruby+/ | Correspond à "rub" ajouté 1 un ou plusieurs de y. |
/\d{3}/ | Correspond exactement à 3 un nombre. |
/\d{3,}/ | Correspond à 3 un ou plusieurs nombres. |
/\d{3,5}/ | Correspond à 3 et4 ou 5 un nombre. |
Cela correspondra au nombre minimum de répétitions.
exemple | description |
---|---|
/<.*>/ | Répétition gourmande : correspond à "<ruby>perl>" |
/<.*?>/ | Répétition non gourmande : correspond à "<ruby>perl>" dans "<ruby>" |
exemple | description |
---|---|
/\D\d+/ | sans groupe : + répète \d |
/(\D\d)+/ | groupe : + répète le couple \D\d |
/([Rr]uby(, )?)+/ | matche "Ruby", "Ruby, ruby, ruby", etc. |
ceci matchera à nouveau le groupe précédemment matché.
exemple | description |
---|---|
/([Rr])uby&\1ails/ | matche ruby&rails ou Ruby&Rails |
/(['"])(?:(?!\1).)*\1/ | chaîne de caractères entre guillemets simples ou doubles.\1 matche le caractère correspondant au premier groupe,\2 matche le caractère correspondant au deuxième groupe, et ainsi de suite. |
exemple | description |
---|---|
/ruby|rube/ | matche "ruby" ou "rube" |
/rub(y|le)/ | matche "ruby" ou "ruble" |
/ruby(!+|\?)/ | "ruby" suivi d'un ou plusieurs ! ou d'un ? |
ceci nécessite de spécifier l'emplacement de la correspondance.
exemple | description |
---|---|
/^Ruby/ | matche une chaîne commençant par "Ruby" ou une ligne |
/Ruby$/ | matche une chaîne se terminant par "Ruby" ou une ligne |
/\ARuby/ | matche une chaîne commençant par "Ruby" |
/Ruby\Z/ | matche une chaîne se terminant par "Ruby" |
/\bRuby\b/ | matche la frontière de mot "Ruby" |
/\brub\B/ | \B est une frontière non mot : il matche "rube" et "ruby" dans "rub", mais ne matche pas "rub" seul |
/Ruby(?=!)/ | si après "Ruby" il y a un exclamation, il matche "Ruby" |
/Ruby(?!!)/ | si après "Ruby" il n'y a pas d'exclamation, il matche "Ruby" |
exemple | description |
---|---|
/R(?#comment)/ | matche "R". Tous les caractères restants sont des commentaires. |
/R(?i)uby/ | ne distingue pas les majuscules et les minuscules lors du match "uby". |
/R(?i:uby)/ | est le même que celui ci-dessus. |
/rub(?:y|le))/ | seulement les groupes, sans \1 références inverses |
sub et gsub et leurs variables de remplacement sub! et gsub! sont des méthodes de chaîne importantes lors de l'utilisation des expressions régulières.
toutes ces méthodes utilisent des motifs d'expressions régulières pour effectuer des opérations de recherche et de remplacement.sub et sub! remplace la première occurrence du motif,gsub et gsub! remplace toutes les occurrences du motif.
sub et gsub retourne une nouvelle chaîne, en laissant la chaîne originale inchangée, et sub! et gsub! ce qui modifiera les chaînes qu'elles appellent.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- phone = "138-3453-1111 # C'est un numéro de téléphone" # Supprimer les commentaires Ruby phone = phone.sub!(/#.*$/, ") puts "Numéro de téléphone : #{phone}" # Supprimer tous les caractères autres que les chiffres phone = phone.gsub!(/\D/, ") puts "Numéro de téléphone : #{phone}"
Les résultats de l'exemple ci-dessus sont les suivants :
Numéro de téléphone : 138-3453-1111 Numéro de téléphone : 13834531111
#!/usr/bin/ruby # -*- coding: UTF-8 -*- text = "rails est rails, un excellent cadre Ruby pour Ruby on Rails" # Changer tous les "rails" en "Rails" text.gsub!("rails", "Rails") # Changer tous les mots "Rails" en majuscules text.gsub!(/\brails\b/, "Rails") puts "#{text}"
Les résultats de l'exemple ci-dessus sont les suivants :
Rails est un excellent cadre Ruby pour Ruby on Rails