Expressions régulières MYSQL (REGEXP) avec syntaxe et exemples

Que sont les expressions régulières ?

Les expressions régulières aident à rechercher des données correspondant à des critères complexes. Nous avons examiné les caractères génériques dans le didacticiel précédent. Si vous avez déjà travaillé avec des caractères génériques, vous vous demandez peut-être pourquoi apprendre les expressions régulières alors que vous pouvez obtenir des résultats similaires en utilisant les caractères génériques. Car, par rapport aux caractères génériques, les expressions régulières nous permettent de rechercher des données correspondant à des critères encore plus complexes.

Syntaxe de base

La syntaxe de base d'une expression régulière est la suivante

SELECT statements... WHERE fieldname REGEXP 'pattern';

ICI -

  • «Instructions SELECT…» est la norme Instruction SELECT
  • « OÙ nom du champ » est le nom de la colonne sur laquelle l'expression régulière doit être exécutée.
  • « Modèle » REGEXP » REGEXP est l'opérateur d'expression régulière et « motif » représente le modèle auquel REGEXP doit correspondre. RLIKE est le synonyme de REGEXP et obtient les mêmes résultats que REGEXP. Pour éviter de le confondre avec l'opérateur LIKE, il mieux vaut utiliser REGEXP à la place.

Regardons maintenant un exemple pratique-

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

La requête ci-dessus recherche tous les titres de films contenant le code de mot. Peu importe que le « code » se trouve au début, au milieu ou à la fin du titre. Tant que cela est contenu dans le titre, il sera pris en compte.

Supposons que nous souhaitions rechercher des films commençant par a, b, c ou d , suivis d'un certain nombre d'autres personnages, comment procéderions-nous pour y parvenir. Nous pouvons utiliser une expression régulière avec les métacaractères pour obtenir les résultats souhaités.

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

Exécuter le script ci-dessus dans MySQL établi contre myflixdb nous donne les résultats suivants.

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

Examinons maintenant de près notre expression régulière responsable du résultat ci-dessus.

'^[abcd]' le caret (^) signifie que la correspondance de modèle doit être appliquée au début et la charlist [abcd] signifie que seuls les titres de films commençant par a, b, c ou d sont renvoyés dans notre jeu de résultats.

Modifions notre script ci-dessus et utilisons la liste de chars NOT et voyons quels résultats nous obtiendrons après avoir exécuté notre requête.

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

Exécuter le script ci-dessus dans MySQL Le workbench contre myflixdb nous donne les résultats suivants.

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

Examinons maintenant de près notre expression régulière responsable des résultats ci-dessus.

'^[^abcd]', le caret (^) signifie que la correspondance de modèle doit être appliquée au début et la charlist [^abcd] signifie que les titres de films commençant par l'un des caractères inclus sont exclus du jeu de résultats.

Métacaractères d'expression régulière

Ce que nous avons examiné dans l’exemple ci-dessus est la forme la plus simple d’une expression régulière. Examinons maintenant les correspondances de modèles d'expressions régulières plus avancées. Supposons que nous souhaitions rechercher des titres de films commençant par le motif « code » uniquement à l’aide d’une expression régulière, comment procéderions-nous ? La réponse est les métacaractères. Ils nous permettent d'affiner nos résultats de recherche de modèles à l'aide d'expressions régulières.

Carboniser Description Exemple
* Le astérisque (*) le métacaractère est utilisé pour faire correspondre zéro (0) ou plusieurs instances des chaînes qui le précèdent SELECT * FROM films WHERE titre REGEXP 'da*'; donnera tous les films contenant des caractères «da». Par exemple, Da Vinci Code, Daddy's Little Girls.
+ Le plus (+) le métacaractère est utilisé pour faire correspondre une ou plusieurs instances de chaînes qui le précèdent. SELECT * FROM `films` WHERE `titre` REGEXP 'mon+'; donnera tous les films contenant des personnages « mon ». Par exemple, Anges et Démons.
? La question(?) le métacaractère est utilisé pour correspondre à zéro (0) ou à une instance des chaînes qui le précèdent. SELECT * FROM `categories` WHERE `category_name` REGEXP 'com?'; donnera toutes les catégories contenant la chaîne com. Par exemple, comédie, comédie romantique.
. Le point (.) le métacaractère est utilisé pour correspondre à n'importe quel caractère, à l'exception d'une nouvelle ligne. SELECT * FROM films WHERE `year_released` REGEXP '200.'; donnera tous les films sortis au cours des années en commençant par les caractères « 200 » suivis d'un seul personnage. Par exemple, 2005,2007,2008, , , etc.
[abc] Le charliste [abc] est utilisé pour faire correspondre l'un des caractères inclus. SELECT * FROM `films` WHERE `titre` REGEXP '[vwxyz]'; donnera tous les films contenant un seul personnage dans « vwxyz ». Par exemple, X-Men, Da Vinci Code, etc.
[^ abc] Le charliste [^abc] est utilisé pour faire correspondre tous les caractères à l'exclusion de ceux inclus. SELECT * FROM `films` WHERE `titre` REGEXP '^[^vwxyz]'; donnera tous les films contenant des personnages autres que ceux de « vwxyz ».
[AZ] Le [AZ] est utilisé pour correspondre à n’importe quelle lettre majuscule. SELECT * FROM `membres` WHERE `adresse_postale` REGEXP '[AZ]'; donnera tous les membres qui ont une adresse postale contenant n'importe quel caractère de A à Z. Par exemple, Janet Jones avec le numéro de membre 1.
[az] Le [az] est utilisé pour correspondre à n’importe quelle lettre minuscule SELECT * FROM `membres` WHERE `adresse_postale` REGEXP '[az]'; donnera tous les membres qui ont des adresses postales contenant n'importe quel caractère de a à z. .Par exemple, Janet Jones avec le numéro de membre 1.
[0-9] Le [0-9] est utilisé pour faire correspondre n’importe quel chiffre de 0 à 9. SELECT * FROM `members` WHERE `contact_number` REGEXP '[0-9]' donnera à tous les membres ayant soumis des numéros de contact contenant les caractères « [0-9] ». Par exemple, Robert Phil.
^ Le curseur (^) est utilisé pour démarrer le match au début. SELECT * FROM `films` WHERE `titre` REGEXP '^[cd]'; donne tous les films dont le titre commence par l'un des personnages du « cd ». Par exemple, Code Name Black, Daddy's Little Girls et Da Vinci Code.
| Le barre verticale (|) est utilisé pour isoler les alternatives. SELECT * FROM `films` WHERE `titre` REGEXP '^[cd]|^[u]'; donne tous les films dont le titre commence par l'un des caractères de « cd » ou « u ». Par exemple, Code Name Black, Daddy's Little Girl, Da Vinci Code et Underworld – AwakenING.
[[:<:]] Le[[:<:]] correspond au début des mots. SELECT * FROM `films` WHERE `titre` REGEXP '[[:<:]]pour';

donne tous les films avec des titres commençant par les personnages. Par exemple : Oublier Sarah Marshal.

[[:>:]] Le [[:>:]] correspond à la fin des mots. SELECT * FROM `films` WHERE `titre` REGEXP 'ack[[:>:]]';

donne tous les films dont les titres se terminent par les caractères « ack »

.Par exemple, Nom de code Noir.

[:classer:] Le [:classer:] correspond à une classe de caractères, c'est-à-dire

[:alpha:] pour faire correspondre les lettres, [:espacer:] pour correspondre à l'espace blanc, [:ponct:] correspond aux ponctuations et [:upper:] pour les lettres de classe supérieure.

SELECT * FROM `films` WHERE `titre` REGEXP '[:alpha:]';

donne tous les films dont les titres contiennent uniquement des lettres

.Par exemple, oublier Sarah Marshal, X-Men etc.

Les films comme Pirates des Caraïbes 4 seront omis de cette requête.

La barre oblique inverse (\) est utilisée comme caractère d'échappement. Si nous voulons l'utiliser dans le cadre du modèle dans une expression régulière, nous devons utiliser des doubles barres obliques inverses (\\)

Résumé

  • Les expressions régulières fournissent une correspondance de modèle puissante et flexible qui peut nous aider à mettre en œuvre des utilitaires de recherche puissants pour nos systèmes de bases de données.
  • REGEXP est l'opérateur utilisé lors de l'exécution de correspondances de modèles d'expressions régulières. RLIKE est le synonyme
  • Les expressions régulières prennent en charge un certain nombre de métacaractères qui permettent plus de flexibilité et de contrôle lors de l'exécution de correspondances de modèles.
  • La barre oblique inverse est utilisée comme caractère d'échappement dans les expressions régulières. Il n'est pris en compte dans la correspondance de modèle que si des doubles barres obliques inverses ont été utilisées.
  • Les expressions régulières ne sont pas sensibles à la casse.