Dans cet article, je veux parler des expressions régulières également appelées REGEX. Pour l’utilisateur non initié, ils sont difficiles à comprendre, je vais donc essayer de montrer le plus simplement possible, avec des exemples, pour quoi et comment ils sont utilisés dans Zennoposter. J’espère que cet article sera utile à tout le monde!
Les expressions régulières sont largement utilisées dans le programme, à savoir:
– Pour rechercher des éléments;
– Lors de l’analyse des données de sites Web ou d’un fichier;
– Pour faciliter le traitement de données provenant de diverses sources (remplacement ou suppression de fragments de texte);
– Lors de la définition des séparateurs dans les listes et les tableaux;
– Beaucoup plus.
L’expression régulière est un langage de recherche de sous-chaînes basé sur du texte basé sur l’utilisation de caractères spéciaux et de pointeurs. En fait, il s’agit d’un exemple de chaîne, qui se compose de caractères (texte statique) et de caractères spéciaux (caractères désignant certaines séquences) et définit la règle pour trouver une sous-chaîne dans le texte traité.
Pour créer des expressions régulières, le programme dispose d’un outil spécial – « Constructeur d’expressions régulières ». Vous pouvez y tester des expressions prêtes à l’emploi et créer les vôtres.
Prenons le texte et composons une expression régulière sur son exemple afin d’obtenir les domaines du site:
http://site.com href = » « > <a
<a href= » « > http://sitesite.com
Dans le constructeur, il y a des champs séparés – le texte qui vient avant la ( <a href= »), qui (http://), commence le texte se termine la recherche (.com), qui vient après (« > ) . En conséquence, nous obtenons l’expression régulière suivante: (? <= <A \ href = « ) http :. *? \. Com (? = »>) Et une liste de domaines dans les résultats du test.
Il existe également deux cases à cocher dans le constructeur:
1) Autoriser la césure – active ou désactive la recherche de texte, en tenant compte des sauts de ligne (lorsque cette option est activée, l’expression régulière ne se limite pas à la recherche sur une seule ligne, et prend également en compte les sauts de ligne);
2) Correspondance la plus courte – active et désactive la recherche de la correspondance la plus courte. Lorsque cette option est activée, dans les résultats, nous obtiendrons la sous-chaîne la plus courte correspondant à l’expression composée. Lorsqu’il est éteint, respectivement – le plus long.
Lorsque vous remplissez ces champs, votre texte sera automatiquement converti et une expression prête à l’emploi sera fournie dans le champ « Texte d’expression régulière » qui peut être utilisé pour la recherche.
Le constructeur d’expressions régulières de Zennoposter est très efficace. Il convient à la composition d’expressions simples lorsque nous avons des correspondances exactes dans le texte – ce qui vient avant ou après le texte que nous devons trouver, comment il commence ou se termine. Parfois, le résultat obtenu n’est pas satisfaisant – il y a plus ou moins de lignes que nécessaire, ou tout simplement au lieu du texte souhaité, nous obtenons des déchets différents. Dans de tels cas, une connaissance plus large et une édition manuelle des expressions générées par le concepteur sont nécessaires.
Afin de composer correctement des expressions régulières par nous-mêmes, nous allons considérer les symboles de base, déterminer dans quelle situation ils peuvent être utilisés.
Symboles:
« . « – tout caractère sauf saut de ligne (\ n);
« \ D » est un caractère numérique, c’est-à-dire tout chiffre de 0 à 9;
« [0-9] » – plage numérique – diffère de \ d en ce que, sous cette forme, il est possible de ne spécifier aucun caractère numérique, mais en utilisant des plages, par exemple [1-3] , qui ne trouveront que les nombres 1, 2 et 3;
« \ D » n’est pas un caractère numérique. Ceux. tous les caractères sont alphabétiques et espaces, à l’exception des nombres;
« \ S » – tous les caractères d’
espacement, qui peuvent inclure:- un espace « \ « ;
– nouvelle page « \ f « ;
– retour chariot » \ r « ;
– nouvelle ligne » \ n « ;
– caractère de tabulation » \ t « ;
– signe de tabulation vertical » \ v « ;
» \ S » n’est pas un caractère d’espacement; toutes les lettres, chiffres et signes. Tout ce qui n’est pas répertorié ci-dessus est un espace blanc.
» \ W » est un caractère alphabétique ou numérique ou un trait de soulignement.
» \ W » est tout caractère autre qu’un caractère alphabétique, numérique ou de soulignement.
Symboles de délimitation:
^ – début d’une ligne;
$ – fin de ligne;
\ b – limite de mot;
\ B n’est pas une limite de mot.
Par exemple, nous devons vérifier si la chaîne contient le mot «rouge», après avoir écrit «rouge» dans le constructeur, nous pouvons obtenir d’autres mots qui incluent ce mot, comme «beau», etc. Quoi que cela arrive, vous devez écrire \ bred \ b – ainsi, tous les mots qui peuvent être similaires à celui souhaité ne seront pas comptés.
Pas une limite de mot, par conséquent, ne fonctionne dans l’autre sens. Par exemple, nous savons que le mot doit se terminer par «vécu», mais nous n’avons pas besoin du mot «vécu», puis nous prescrivons \ B vécu et obtenons une liste de mots avec la fin dont nous avons besoin – nous avons chéri, survécu, etc.
Nombre de correspondances (quantificateurs):
{5} – exactement 5;
{1,5} – de 1 à 5 inclus;
{1,} – de 1 ou plus;
? – zéro ou un, correspond également à {0,1} ;
* – zéro ou plus, correspond également à {0,} ;
+ – Un ou plusieurs, correspond également à {1,} .
Les quantificateurs sont placés après les caractères à répéter.
Prenez, par exemple, un point qui représente n’importe quel caractère et construisez une expression régulière qui correspond à n’importe quelle séquence de 4 caractères. Le résultat ressemblera à ceci: {4}
Vous pouvez donc indiquer que dans le texte de recherche, il y a un nombre fixe ou illimité de répétitions de caractères définis, c’est-à-dire:
s. {2} l – une telle expression régulière trouvera des mots tels que table, chaise, etc., mais elle correspondra également à une chaîne contenant des espaces, des nombres, etc. au milieu.
Afin d’indiquer qu’il n’y aura que des lettres à l’intérieur, il est nécessaire de s’inscrire de cette manière:
c [a-z] {2} L
Vous pouvez également définir une séquence ou un jeu de caractères spécifique à prendre en compte. Pour cela, des crochets sont utilisés, dans lesquels des plages ou des jeux de caractères sont écrits.
Des tirets sont utilisés entre les valeurs pour indiquer les plages. Pour l’énumération, les caractères sont simplement écrits dans une chaîne sans aucun séparateur.
[a-zA-Z1-5abv] – cette séquence signifie toute lettre anglaise en majuscules et minuscules, les nombres de 1 à 5 inclus, ainsi que les lettres russes a, b et c.
L’expression régulière ressemblera à ceci:
avec [tou] {2} L
Nous notons qu’après la lettre «c», il y a 2 caractères indiqués entre crochets et cette séquence trouvera les mots table et chaise, mais elle correspondra également à la séquence de lettres «suul», «sutl» et autres.
Modificateurs:
(? I) – active l’insensibilité à la casse de l’expression;
(? -i) – désactive l’insensibilité à la casse de l’expression.
En utilisant ces modificateurs, nous pouvons dire à l’expression régulière si nous nous soucions de la casse lors de la recherche de correspondances. En désactivant la casse au début de l’expression régulière, nous la désactivons pour toutes les correspondances suivantes dans la chaîne.
Il y a aussi des cas où, à un endroit, le registre n’est pas important pour nous, mais à un autre, il est important.
Cette expression régulière correspondra à la chaîne «Test, TEST», car la première phrase est insensible à la casse et elle trouve toutes les correspondances, mais elle ne trouvera pas «TEST, Test», car la deuxième phrase doit avoir une correspondance exacte au cas où.
Modificateurs de recherche multiligne:
(? M) – active la recherche multiligne
(? -M) – désactive la recherche multiligne
Pour trouver toutes les lignes commençant par un caractère non blanc, l’expression régulière suivante convient:
(? m) ^ \ S. *
Caractères qui doivent être échappés pour qu’ils soient comptés dans l’expression régulière en tant que texte et non en tant que partie de l’expression régulière (métacaractères):
^ [. $ {*
(\ +) | ?
Lorsque vous utilisez ces caractères dans une expression régulière dans le cadre du texte, ils doivent être échappés avec un \.
Par exemple, si vous avez un point d’interrogation dans le texte, il est noté \?
Examinons en détail les principaux cas d’utilisation des caractères d’expression régulière.
. {5,10} – cette expression régulière correspond à une séquence de 5 à 10 de tous les caractères, à l’exception d’un saut de ligne. Il peut être utilisé pour couper le texte à la longueur souhaitée, analyser les sous-chaînes d’une certaine longueur, ainsi que pour spécifier la quantité requise de jeu de caractères inconnus dans le texte.
a \ d + a – dans les cas où entre le texte souhaité, qui est connu, il y a des nombres composés d’un nombre différent de caractères. Cette expression régulière correspond à a1a, a23a, a459a, etc.
a [2-5] {2,4} a – cette expression régulière prendra un texte qui commence par «a» et contient de 2 à 4 chiffres 2, 3, 4 ou 5 à l’intérieur et se termine par «a». Par exemple, a354a ou a52a
Par exemple, vous devez prendre l’url du site de la ligne suivante id = « 123 » <a href= » www.site.com « >, où le numéro d’identification change toujours, mais simplement dans la balise a href, d’autres URL ne sont pas nécessaires.
Le testeur d’expression régulière nous donnera cette option:
(? <= id = « 123 » \ <a \ href = » ). *? (? = »>)
mais il ne correspondra qu’aux chaînes avec des ID égaux à « 123 ». Car nous devons indiquer qu’au lieu de 123, il peut y avoir n’importe quelle séquence de nombres, nous les remplaçons par \ d + et obtenons l’expression régulière suivante
(? <= id = « \ d + » \ <a \ href = « ). *? (? = »>)
qui recevra toutes les lignes contenant un identifiant.
Quant au match le plus court en regex. Vous devez comprendre que la correspondance la plus courte signifie une partie du texte qui commence et se termine selon la condition spécifiée dans l’expression régulière.
Si nous prenons la ligne <a href= » www.site.com « > <a href= » www.site2.ru « > et y appliquons une expression régulière » (? <= <A \ href = »). *? \ .ru (? = « >) ”, en réponse, nous recevrons www.site.com « > <a href = » www.site2.ru au lieu du » www.site2.ru » attendu
Pourquoi la recherche ne nous a-t-elle pas retourné la correspondance la plus courte? Cela se produit parce que l’expression régulière a reçu la première partie du texte, qui doit précéder le texte de recherche, c’est-à-dire « <a href= »>. En outre, il a continué à rechercher jusqu’à ce qu’il trouve une condition par laquelle la ligne doit se terminer, c’est-à-dire » .ru « , suivi de »>
Pour éviter cela, dans ce cas vous pouvez utiliser une structure d’expression régulière comme celle-ci:
(? <= <a \ href = « ) \ S +? \. ru (? = »>)
pour indiquer qu’entre les parties du texte recherché, il y a un caractère non blanc, au lieu de n’importe quel caractère, comme auparavant.Dans le
cas, si la partie de l’expression régulière peut contenir quelque chose – différentes longueurs de texte différent, ou il peut être complètement absent, c’est possible à cet endroit insérez la séquence « . *? »
Début et fin d’une ligne
Pour indiquer que la valeur souhaitée commence sur une nouvelle ligne et / ou se termine à la fin d’une ligne, l’expression régulière suivante convient:
^ chaîne $
Souvent, cette notation vous aide à créer l’expression régulière correcte pour rechercher des éléments sur une page Web.
Dans les cas où nous recherchons un élément sur différents sites, et il peut être affiché avec une casse différente, par exemple: String, STRING, string. Du point de vue d’une machine, ces trois valeurs seront différentes, et il n’y en aura qu’une seule sensible à la casse.
Si vous avez besoin de préparer une expression régulière qui trouvera toutes ces correspondances, vous devez écrire
(? i) ^ $ chaîne
ceux. nous désactivons le respect de la casse de l’expression régulière, puis écrivons l’expression régulière elle-même. Dans ce formulaire, toutes les correspondances seront trouvées, quel que soit le cas.
Si vous avez besoin de prendre du texte à partir d’une page Web, d’un courrier ou d’un fichier, vous devez tenir compte du fait que le début de la ligne indiquée par ^ n’est que le début de la première ligne de texte et la fin de la ligne indiquée par $ n’est que la fin de la dernière ligne.
Le reste des lignes du texte a des sauts de ligne, c’est-à-dire ces lignes se terminent toutes par un retour chariot (\ r) et commencent par une nouvelle ligne (\ n).
Afin d’indiquer qu’une expression régulière doit commencer et se terminer dans une ligne, nous pouvons écrire une condition OR, qui est notée comme une barre oblique verticale – |
L’expression régulière ressemble à ceci:
(? i) (\ n | ^) ligne (\ r | $)
Vous pouvez également utiliser en plus le modificateur de recherche multiligne, qui considère chaque ligne comme nouvelle:
(? im) ^ ligne
En savoir plus sur l’opérateur OR
Dans une expression régulière, vous pouvez spécifier ce que vous recherchez à l’aide de l’opérateur OR comme suit:
1 | 2 (qui indiquera un choix de 1 ou 2).
Ainsi, nous pouvons vérifier la présence de plusieurs textes sur la page à la fois.
Par exemple, vous devez vérifier les phrases «Bonjour», «Merci de vous être inscrit», «Bienvenue» sur la page, nous pouvons combiner toutes ces données en une seule expression régulière comme suit:
Bonjour | Merci pour votre inscription | Bienvenue
Avec cette construction, la vérification de la présence de texte sur la page recevra l’une des options spécifiées.
Si le signe «OU» ne doit pas être utilisé pour toute l’expression régulière, comme indiqué ci-dessus, mais uniquement pour sa partie, cette partie doit être entre crochets. Par exemple:
Que (Il | Elle | Cela) mérite (ie | u) t \.
Cette expression régulière correspondra aux phrases «Que fait-il». « Que fait-elle. » et «Que font-ils».
Quelques exemples supplémentaires d’expressions régulières prêtes à l’emploi:
<. *?> – trouvera toutes les balises dans le texte de recherche;
[\. \ -_ A-Za-z0-9] +? @ [\. \ – A-Za-z0-9] +? [\. A-Za-z0-9] {2,} – trouvera tous les e-mails ;
(\ d {1,3} \.) {3} \ d {1,3}: \ d {1,5} – obtenir l’IP et le port;
(http | ftp | https): \ / \ / [\ w \ -_] + (\. [\ w \ -_] +) + ([\ w \ – \., @? ^ =% & amp;: / ~ \ + #] * [\ w \ – \ @? ^ =% & amp; / ~ \ + #])? – obtiendra les URL du site.
Merci à tous ceux qui ont maîtrisé cet article, j’espère qu’il a été utile aux utilisateurs qui l’ont lu et qu’il sera utile à beaucoup d’autres.
Article très intéressant trouvé sur le forum et traduit – crédits Zennoscript