-
Expression régulière :
Les expressions régulières permettent aux utilisateurs de construire un modèle de correspondance à l'aide d'une série de caractères spéciaux, puis de comparer le modèle de correspondance avec des objets cibles tels que des fichiers de données, des entrées de programme et des entrées de formulaire sur des pages WEB, selon que l'objet de comparaison contient ou non la correspondance. modèle, exécutez le programme correspondant. La régularité a gagné l'amour des programmeurs pour sa simplicité, sa praticité et sa rapidité. 
Quelques réflexions sur l'écriture de regex :
1. Tout d’abord, déterminez les règles. Quel type de chaîne devez-vous faire correspondre, de quelles parties est-elle composée et quelles sont ses caractéristiques.
2. Proposez la plus petite unité. Parfois, certaines règles de correspondance sont répétées. Nous pouvons essayer de trouver des points communs et les planifier dans une règle.
3. Écrivez les règles régulières une par une en fonction de leurs règles et de leurs plus petites unités.
4. Unifiez la combinaison de ces régularités unitaires pour former la régularité complète souhaitée.
Ici, nous devons comprendre certaines balises de base et leur utilisation. Toutes les règles sont composées de balises de base. Le balisage régulier est également très simple, alors autant le comprendre.
Balises couramment utilisées dans les expressions régulières
1 Marqueurs couramment utilisés dans les expressions régulières 2 ^ | Début d'une ligne ou d'une chaîne 3 $ | Fin d'une ligne ou d'une chaîne 4 5 w | Caractères de mots (chiffres, lettres ou traits de soulignement) 6 W | Caractères autres que des mots 7 d | Nombres (équivalents à [0-9]) 8 D | Caractères autres que des espaces 9 10 A Début de chaîne 11 Z | Fin de chaîne ou dernier caractère de nouvelle ligne 12 z | Fin de chaîne 13 14 s | Caractère vide 15 S | Caractère non vide 16 17 b | Limite de mot (à l'extérieur de []) 18 B | Limite de non-mot 19 b | ] | Tout caractère de l'ensemble, avec un trait d'union au milieu, représente une plage, telle que : [0-9], [az]21 ou 1 expression précédente ou 23 () | 25 * | zéro ou plusieurs expressions précédentes 26 *? | zéro ou plusieurs expressions précédentes (non gourmandes) 27 + | 1 ou plusieurs expressions précédentes 28 + | | mn expressions précédentes 30 {m,n}? | mn expressions précédentes (non gourmandes) 31 32 33 Aussi {?=} { ?!} (?>) (?#) (?imx-imx) etc.
L'exemple le plus basique :
1 # Correspond à la chaîne entière 2 puts /ruby/ =~ "ruby" # 0 3 puts /ruby/ =~ "Ruby" # nil 4 5 # Correspond au début et à la fin d'une ligne ou d'une chaîne 6 str = "abcdef" 7 puts str 8 puts /^abc/ =~ str # 0 9 puts /def$/ =~ str # 310 11 str = "abcndefn" 12 puts /^abc/ =~ str # 013 puts /def$/ =~ str # 414 puts /abc/ =~ str # 015 puts /def/ =~ str # 416 17 #Faire correspondre le début et la fin de la chaîne elle-même 18 str = "abcndefn" 19 puts /Aabc/ =~ str # 020 puts /defZ/ =~ str # 421 puts /defz/ =~ str # nil22 23 #Match word caractères 24 puts "Match word caractères" 25 pattern = /w/26 puts pattern = ~ "abc " # 027 puts pattern =~ "." # nil28 29 # Correspond à l'entier 30 # d Numéro 31 # D Non-numéro 32 puts "Match number" 33 puts /d/ =~ "122" #034 puts /D / =~ "122" #nil35 puts /D/ =~ "abc" #036 37 38 #Border 39 str = "C'est ton ami !"40 puts str41 puts str.gsub(/b/ ,"|" ) # |Ceci |est| |votre| |ami|!42 met str.gsub(/B/,"-") # Ceci est votre ami !-43
Instance de qualificatif
1 put "qualificatif" 2 puts "qualificatif : *" 3 puts /(abc)*/ =~ "a" # 0 4 puts /(abc)*/ =~ "abc" # 0 5 6 7 puts "qualificatif Qualificateur : +" 8 puts /(abc)+/ =~ "a" # néant 9 puts /(abc)+/ =~ "abc" # 010 11 puts "Qualificateur : ? " 12 puts /(abc)?/ =~ " c" # 013 puts /(abc)?/ =~ "abc" # 014 15 16 puts "Qualificateur : {n}"17 puts /(abc){2}/ =~ "abc" # nil18 puts /(abc) {2}/ =~ "abcabc" # 019 20 puts "Qualificateur : {n,}"21 puts /(abc){2,}/ =~ "abc" # nil22 puts /(abc){ 2,}/ = ~ "abcabc" # 023 24 puts "Qualificateur : {n,m}"25 puts /(abc){2,3}/ =~ "abc" # nil26 puts /(abc){2, 3}/ =~ " abcabcabc" # 027 28 puts "Qualificateur : *?" 29 puts /(abc)*?/ =~ "a" # 030 puts /(abc)*?/ =~ "abcabc" # 031 32 puts "Qualificateur : +? " 33 puts /(abc)+?/ =~ "a" # nil34 puts /(abc)+?/ =~ "abcabc" # 035 36 puts "Qualificateur : ??"37 puts /(abc)??/ = ~ "a" # 038 puts /(abc)??/ =~ "abcabc" # 039 40 41 #match, {1} {3}42 # {3} peut correspondre, alors {1} correspondra certainement, mais le l'inverse n'est pas vrai 43 # Plage de correspondance : {1} > {3}
Exemples courants :
1 met "exemple" 2 # Faire correspondre les numéros de téléphone : 3 # En général, les numéros de téléphone chinois comportent 7 à 8 chiffres, les indicatifs régionaux sont des nombres entiers de 3 à 4 chiffres, le premier chiffre de l'indicatif régional est 0 et le séparateur '-' est utilisé au milieu 4 #Faites attention aux première et dernière restrictions Symbole 5 pattern = /^0d{2,3}-d{7,8}$/ 6 puts pattern =~ "010-82809999" # 0 7 puts pattern =~ "00010-82809999" # nul 8 9 #Match numéro de téléphone portable 10 # Commençant par 1, le deuxième chiffre est 3, 5, 8, 11 chiffres 11 pattern = /^1[3,5,8] d{9}$/12 puts pattern =~ "15810990001" #013 14 #numéro de carte d'identité 15 pattern = /d{18}|d{15}/16 17 #Match IP18 #Quatre groupes d'entiers ne dépassant pas 255, séparés par '.' 19 met "IP" 20 num = /^d|[01]?d{1,2}|2[0-4]d|25[0-5]/21 modèle = /^(#{num}.){3} #{num}$/22 #Un tout : motif = /^(^d|[01]?d{1,2}|2[0- 4]d|25[0-5].) {3}^d|[01]?d{1,2}|2[0-4]d|25[0-5]$/ 23 puts pattern =~ "127.0.0.1" # 024 puts pattern =~ "254.255.255.255"25 26 #Correspondre à l'adresse e-mail 27 pattern = /^w+@w+.w+$/ #Ceci n'a pas de '-' 28 pattern = /^[w-]+@[w- ]+.[w-]+$/29 puts pattern =~ " [email protected] " #030 31 # Correspond à l'url32 # http:// modèle www.google.cn33 = /(http|https|ftp): (//|\\)((w)+[.]){1,}(net|com|cn|org| cc|tv|[0-9]{1,3})( ((/[~]*|\[~]*)34 (w)+)|[.](w)+ )*(((([?](w)+){ 1}[=]*))*((w)+){1}([&](w)+[=]( w)+)*)*/35 36 puts pattern =~ " http://www.google.cn?uid=123 " #0
autre
Le sens de la cupidité
1 met "gourmand" 2 #Greedy signifie correspondre à la chaîne la plus longue possible 3 # '.' Signification : caractères autres que les nouvelles lignes 4 str = "là où la mer rencontre la terre blanchie par la lune" 5 met str 6 match = /.* the/.match(str) 7 met match[0] # là où la mer rencontre le, * est gourmand. Si vous ne voulez pas être gourmand, ajoutez + '?' 8 #*?non-greedy 9 match = /.*?the/.match(str)10 puts match[0] # où the11 12 str.insert( 0,"Bonjour n")13 match = /.*?the/.match(str)14 met match[0] #où le
Aperçu positif et négatif
1 #Aperçu positif et négatif 2 met "Aperçu positif et négatif" 3 s1 = "Dictionnaire du Nouveau Monde" 4 s2 = "Symphonie du Nouveau Monde" 5 s3 = "Nouvel Ordre Mondial" 6 7 reg = /Nouveau Monde (?=Dictionnaire| Symphonie)/ 8 m1 = reg.match(s1) 9 puts m1.to_a[0] # "Nouveau Monde"10 m2 = reg.match(s2)11 puts m2.to_a[0] # "Nouveau Monde"12 puts reg .match(s3) # nil13 14 met "aperçu négatif"15 16 reg = /New World (?!Symphony)/ # Il n'y a pas de "Symphony" après "New World" 17 puts reg.match(s1).to_a[0 ] # "Nouveau Monde"18 met reg.match(s2).to_a[0] # nil19 met reg.match(s3).to_a[0] # "Nouveau Monde"
-