[RUBY] [Mémorandum] J'ai commencé à travailler, donc je veux étudier les expressions régulières avec fermeté [Expressions régulières]

Article de référence

https://qiita.com/jnchito/items/893c887fbf19e17d3ff9 https://qiita.com/jnchito/items/64c3fdc53766ac6f2008

Pour être honnête, je suis redevable à l'auteur de cet article. Cet article est un article de sortie de l'article ci-dessus, il peut donc être préférable de lire cet article.

Qu'est-ce qu'une expression régulière?

"Mini langage pour rechercher et remplacer efficacement des chaînes de caractères en spécifiant un motif"

A été écrit dans l'article ci-dessus. Hmmmm. Certainement vague, mais je me souviens des "modèles", des recherches et des remplacements.

Je vais l'essayer pour le moment. Voyons voir.

Jouez avec le site https://rubular.com/ pour apprendre les expressions régulières.

La chaîne de test ressemble à ceci.

Nom: Onikan
Tél: 03-1234-5678
Adresse: 1 Chuo-ku, Tokyo-2-3

Lorsque j'ai tapé «\ d», seule la valeur numérique était affichée en bleu. (À propos, la barre oblique inverse peut être effectuée avec l'option + \ pour mac)

En d'autres termes, «\ d» représente un nombre demi-largeur (0123456789). \ d est aussi appelé ** meta language **, et cela signifie également qu'il représente un ensemble de caractères, il semble donc s'appeler ** classe de caractères **. Hmmmm.

C'est le ** "mini langage pour rechercher et remplacer efficacement les chaînes de caractères" ** qui est sorti plus tôt, et est-ce l'un des "modèles"?

Quoi qu'il en soit, rappelez-vous que «\ d» représente un nombre demi-largeur.

Essayez de connecter des méta-caractères.

Puisque \ d représente un nombre demi-largeur, apprenons le cas de la représentation de deux ou trois.

J'ai tapé \ d \ d- \ d \ d \ d \ d- \ d \ d \ d \ d. Cette fois, l'ensemble y compris les traits d'union est sélectionné.

\ d \ d représente deux nombres demi-largeur concaténés. (Comme 12 ou 34.)

Essayez de courir sur Ruby

text = <<-TEXT
Nom: Onikan
Tél: 03-1234-5678
Adresse: 1 Chuo-ku, Tokyo-2-3
TEXT
text.scan /\d\d-\d\d\d\d-\d\d\d\d/
# => ["03-1234-5678"]

Au fait, si vous n'êtes pas familier avec la partie de text = << - TEXT, vous pouvez rechercher" Ruby here document ".

Essayez-le avec JavaScript

const text = "Nom: Onikan\n Téléphone: 03-1234-5678\n Adresse: 1 Chuo-ku, Tokyo-2-3";
text.match(/\d\d-\d\d\d\d-\d\d\d\d/g);
// => ["03-1234-5678"]

\ n est le code de saut de ligne. g est appelé une option globale. Il existe les différences suivantes entre avec et sans.

--Oui: lorsque le premier est trouvé, la recherche se termine. --Aucun: extrait la chaîne de caractères correspondante.

Correspond à l'indicatif régional

/ \ d \ d- \ d \ d \ d \ d- \ d \ d \ d \ d / ne correspond pas à tous les nombres. Par exemple

etc. Apprenez les expressions régulières qui peuvent gérer cela. L'important ici est de trouver le ** motif ** à rechercher. Dans ce cas, c'est comme suit.

--2 à 5 nombres demi-largeur --Trait d'union -1 à 4 nombres demi-largeur --Trait d'union --4 nombres demi-largeur

Alignez-vous dans cet ordre. La nouvelle connaissance qui sort ici utilise les méta caractères «{n, m} et {n}». Puisqu'il spécifie le nombre de caractères, il est appelé un spécificateur de quantité.

{n, m} indique que "le dernier caractère est n ou plus et m ou moins". Par exemple, s'il s'agit de «\ d {1,4}», ** nombre demi-largeur ** représente 1 à 4 caractères.

Donc, si vous l'appliquez au modèle précédent, il ressemblera à ceci.

Ce devrait être \ d {2,5} - \ d {1,4} - \ d {4}.

Je veux aussi soutenir les parenthèses!

Dans l'exemple ci-dessus, "03 (1234) 5678" etc. ne peut pas être pris en charge. Donc, ** je veux le changer pour qu'il puisse être utilisé avec des tirets ou des parenthèses **

Les nouveaux modèles sont "tiret ou (" et "tiret ou)". De nouvelles connaissances sortent ici.

"Un caractère de A ou B" → signifie "[AB]". (Puisqu'il représente un ensemble de caractères, c'est une sorte de classe de caractères.) Au fait, il n'y a pas de limite au nombre de caractères dans «[]». «[ABC]» représente n'importe quel caractère.

Par conséquent, "tiret ou (" est exprimé par "[- (]". "Tiret ou)" "[-)]". Écrivons le tout.

\d{2,5}[-(]\d{1,4}[-)]\d{4}

Les traits d'union peuvent avoir une signification particulière. Par exemple, «[A-Z]» signifie «A ou B ou C ou ... Z». En d'autres termes, il représente un caractère anglais pleine largeur. Autrement dit, il peut représenter une plage de caractères **. ** **

Si un trait d'union est entré au début ou à la fin de «[]» comme «[-AB]» ou «[AB-]», il sera considéré comme le trait d'union lui-même.

Résumé

-- \ d représente un nombre demi-largeur --{n, m}indique que le caractère précédent est n ou plus et m ou moins. --{n}représente exactement n caractères. -- [ab] ʻa ou b lettre simple -- [a-z] "est une lettre de a ou b ou c ou ... z --[-az]représente-ou a ou z.

finalement

Comme je l'ai dit au début, cet article est un article de sortie, donc je pense que vous devriez vous y référer.

https://qiita.com/jnchito/items/893c887fbf19e17d3ff9

Recommended Posts

[Mémorandum] J'ai commencé à travailler, donc je veux étudier les expressions régulières avec fermeté [Expressions régulières]
Je veux pouvoir penser et écrire moi-même des expressions régulières. ..
Je veux convertir des caractères ...
Je veux extraire entre des chaînes de caractères avec une expression régulière