Manuel des expressions régulières

Lire(27820) temps de mise à jour(2022-04-13)

Expressions régulières, également appelées expressions régulières. (Anglais : Regular Expression, souvent abrégé en regex, regexp ou RE dans le code), un concept en informatique. Les tableaux normaux sont généralement utilisés pour récupérer et remplacer du texte qui correspond à un certain modèle (règle).


L'expression régulière est une formule logique pour les opérations sur les chaînes. Elle utilise des caractères spécifiques prédéfinis et des combinaisons de ces caractères spécifiques pour former une "chaîne de règles". Cette "chaîne de règles" est utilisée pour exprimer la logique de filtrage des chaînes.

De nombreux langages de programmation prennent en charge les opérations sur les chaînes à l'aide d'expressions régulières. Par exemple, Perl intègre un puissant moteur d’expressions régulières. Le concept d'expressions régulières a été popularisé à l'origine par des logiciels-outils sous Unix (tels que sed et grep). Les expressions régulières sont souvent abrégées en « regex », le singulier inclut les expressions rationnelles, les expressions régulières et le pluriel inclut les expressions rationnelles, les expressions rationnelles et les expressions rationnelles.

Premier exemple d'expression régulière !

Instance

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP中文网教程(php.sn)</title>
</head>
<body>

<script>
var str = "abc123def";
var patt1 = /[0-9]+/;
document.write(str.match(patt1));
</script>

</body>
</html>

Exécuter l'instance »

Cliquez sur le bouton « Exécuter l'instance » pour afficher l'instance en ligne

Astuce : Notre didacticiel sur les expressions régulières vous aidera à acquérir des connaissances sur les expressions régulières, du niveau débutant au niveau avancé. Si vous avez des questions, veuillez vous rendre sur le site Web PHP chinois Regular Expression Community pour poser vos questions, et des internautes enthousiastes y répondront pour vous.

Fonctionnalités d'expression régulière

  • très flexibles, logiques et fonctionnelles

  • peuvent rapidement réaliser un contrôle complexe de chaînes d'une manière extrêmement simple ;

  • Pour ceux qui débutent, c'est relativement obscur et difficile à comprendre.

Étant donné que le principal objet d'application des expressions régulières est le texte, elles sont utilisées dans divers éditeurs de texte, allant du célèbre éditeur EditPlus aux grands éditeurs tels que Microsoft Word et Visual Studio. Les expressions régulières peuvent être utilisées dans toutes les expressions à traiter. contenu du texte.

Objectif

Étant donné une expression régulière et une autre chaîne, nous pouvons atteindre l'objectif suivant :

  • Si la chaîne donnée est conforme à la logique de filtrage de l'expression régulière (appelée "matching")

  • Nous pouvons obtenir la partie spécifique que nous voulons de la chaîne via des expressions régulières.

Moteur régulier

Le moteur régulier peut être principalement divisé en deux catégories :

  • L'un est DFA,

  • L'un est NFA.

Les deux moteurs ont une longue histoire (plus de 20 ans maintenant), et il existe de nombreuses variantes produites par ces deux moteurs ! Par conséquent, l’introduction de POSIX évite la génération continue de variantes inutiles. De cette manière, les moteurs classiques grand public sont divisés en trois catégories : 1. DFA, 2. NFA traditionnel et 3. NFA POSIX.

Les moteurs DFA s'exécutent en temps linéaire puisqu'ils ne nécessitent pas de retour en arrière (et donc ils ne testent jamais deux fois le même caractère). Le moteur DFA garantit également que la chaîne la plus longue possible correspond. Cependant, comme le moteur DFA ne contient qu'un état limité, il ne peut pas faire correspondre les modèles avec des références arrière et, comme il ne construit pas d'expansions explicites, il ne peut pas capturer de sous-expressions.

Les moteurs NFA traditionnels exécutent un algorithme de backtracking de correspondance dit « gourmand » qui teste toutes les extensions possibles d'une expression régulière dans un ordre spécifié et accepte la première correspondance. Étant donné que la NFA traditionnelle construit une extension spécifique d'une expression régulière pour obtenir une correspondance réussie, elle peut capturer à la fois les correspondances de sous-expressions et les références arrière correspondantes. Cependant, comme le NFA traditionnel fait marche arrière, il peut accéder plusieurs fois exactement au même état (s'il a été atteint via des chemins différents). Par conséquent, dans le pire des cas, son fonctionnement peut être très lent. Étant donné que la NFA traditionnelle accepte la première correspondance trouvée, d'autres correspondances (éventuellement plus longues) peuvent également ne pas être découvertes.

Les moteurs NFA POSIX sont similaires aux moteurs NFA traditionnels, sauf qu'ils continueront à revenir en arrière jusqu'à ce qu'ils puissent s'assurer qu'ils ont trouvé la correspondance la plus longue possible. Par conséquent, le moteur POSIX NFA est plus lent que le moteur NFA traditionnel ; et lorsque vous utilisez POSIX NFA, vous ne souhaiterez probablement pas modifier l'ordre des recherches rétrospectives pour prendre en charge des recherches de correspondances plus courtes au lieu de recherches de correspondances plus longues.

Les principaux programmes qui utilisent le moteur DFA sont :

awk,egrep,flex,lex,MySQL,Procmail等;

Les principaux programmes qui utilisent le moteur NFA traditionnel sont :

GNU Emacs,Java,ergp,less,more,.NET语言,PCRE library,Perl,PHP,Python,Ruby,sed,vi;

Les principaux programmes qui utilisent le moteur POSIX NFA sont :

mawk,Mortice Kern Systems’ utilities,GNU Emacs(使用时可以明确指定);

Il existe également des hybrides DFA/NFA moteurs :

GNU awk,GNU grep/egrep,Tcl。

Un exemple pour illustrer brièvement la différence entre le travail NFA et DFA :

Par exemple, il y a la chaîne this is yansen's blog, et l'expression régulière est /ya(msen|nsen|nsem)/ (don Je m'en fiche de l'expression, c'est juste pour illustrer la relation entre les moteurs (différences de travail). NFA fonctionne comme suit : Tout d'abord, recherchez y dans la chaîne, puis vérifiez s'il est suivi de a. S'il s'agit de a, continuez à rechercher s'il est suivi de m. Sinon, vérifiez s'il est suivi de n (le. la branche de sélection msen est supprimée pour le moment).

Ensuite, continuez à voir s'il est suivi de s, e, puis testez si c'est n. Si c'est n, la correspondance est réussie. Sinon, testez si c'est m. Pourquoi M? Étant donné que NFA fonctionne sur la base d'expressions régulières et teste les chaînes de manière répétée, la même chaîne peut être testée plusieurs fois !

Ce n'est pas le cas avec DFA. DFA recherchera y dans l'ordre en commençant par t et localisera y. Si l'on sait qu'il est suivi de a, il vérifiera si l'expression a a, et cela se produit. être ici. Ensuite, la chaîne a est suivie de n et DFA teste les expressions à tour de rôle. À ce stade, msen ne répond pas aux exigences et est éliminé. nsen et nsem répondent aux exigences, puis DFA vérifie les chaînes dans l'ordre. Lorsque n dans sen est détecté, seule la branche nsen répond aux exigences et la correspondance est réussie !

On voit de là que les deux moteurs fonctionnent de manière complètement différente. L'un (NFA) est orienté expression, et l'autre (DFA) est orienté texte ! De manière générale, le moteur DFA recherche plus rapidement ! Cependant, NFA est orienté expression et plus facile à manipuler, c'est pourquoi la plupart des programmeurs préfèrent les moteurs NFA ! Les deux moteurs ont leurs propres atouts et la citation réelle dépend de vos besoins et de la langue que vous utilisez.

Contenu couvert dans ce manuel de didacticiel sur les expressions régulières

Ce didacticiel sur les expressions régulières couvre toutes les connaissances de base et avancées sur les expressions régulières, y compris la syntaxe des expressions régulières, les métacaractères des expressions régulières, la priorité des opérateurs d'expressions régulières, les expressions régulières, les règles de correspondance d'expressions et plus encore.

Conseils : Chaque chapitre de ce tutoriel contient de nombreux exemples d'expressions régulières. Vous pouvez directement cliquer sur le bouton "Exécuter l'exemple" pour afficher les résultats en ligne. Ces exemples vous aideront à mieux comprendre les expressions régulières.

Autres ressources de référence d'apprentissage liées aux expressions régulières

En plus de l'expansion des connaissances sur le côté droit de cette page, les ressources suivantes sont également sélectionnées pour tout le monde